output_description: Print the length of the longest directed path in G.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M
      x_1 y_1
      x_2 y_2
      :
      x_M y_M
attempt: #include <bits/stdc++.h>
  using namespace std;
  
  int dfs(vector<int> graph[], int vertex, int N);
  // template<class T>
  void printvector(vector<int> &toprint)
  {   
      for(int i = 0; i < toprint.size(); i++) cout << toprint[i] << " ";
      cout << endl;
  }
  // USING ADJENCY LIST TO STORE vertices 
  int N, M; // Vertices, Edges
  int main()
  {
      cin >> N >> M;
      vector<int>graph[N+1];
      int x1, y1;
      for(int i = 1; i <= M; i++)
      {
          cin >> x1 >> y1;
          graph[x1].push_back(y1);
      }
      // cout << endl;
      
      // for(int v = 1; v <= N; v++)
      // {
      //     printvector(graph[v]);
      // }
      int finalmax = INT_MIN;
      for(int i = 1; i <= N; i++)
      {
          finalmax = max(finalmax, dfs(graph, i, N));
      }
  
      cout << finalmax << endl;
  
      return 0;
  
  }
  
  int dfs(vector<int> graph[], int vertex, int N)
  {
      if (graph[vertex].size() == 0)
      {
          return 0;
      }
      int maximum = INT_MIN;
      for(auto v : graph[vertex])
      {
          maximum = max(maximum , 1 + dfs(graph, v, N));
      }
  
      return maximum;
  }
problem_description: Statement
  
  There is a directed graph G with N vertices and M edges. The vertices are
  numbered 1, 2, \ldots, N, and for each i (1 \leq i \leq M), the i-th directed
  edge goes from Vertex x_i to y_i. G **does not contain directed cycles**.
  
  Find the length of the longest directed path in G. Here, the length of a
  directed path is the number of edges in it.
samples: [{"input": "4 5\n    1 2\n    1 3\n    3 2\n    2 4\n    3 4", "output": "3\n    \n\nThe red directed path in the following figure is the longest:\n\n![](https://img.atcoder.jp/dp/longest_0_muffet.png)\n\n* * *"}, {"input": "6 3\n    2 3\n    4 5\n    5 6", "output": "2\n    \n\nThe red directed path in the following figure is the longest:\n\n![](https://img.atcoder.jp/dp/longest_1_muffet.png)\n\n* * *"}, {"input": "5 8\n    5 3\n    2 3\n    2 4\n    5 2\n    5 1\n    1 4\n    4 3\n    1 3", "output": "3\n    \n\nThe red directed path in the following figure is one of the longest:\n\n![](https://img.atcoder.jp/dp/longest_2_muffet.png)"}]