#include #include using namespace std; using ll=long long; #define rep(i,s,t) for(ll i=s;i<(ll)(t);i++) #define rrep(i,s,t) for(ll i=(ll)(t)-1;i>=(ll)s;i--) #define all(x) begin(x),end(x) #define rall(x) rbegin(x),rend(x) #define TT template TT using vec=vector; TT bool chmin(T &x,T y){return x>y?(x=y,true):false;} TT bool chmax(T &x,T y){return x>N; atcoder::scc_graph G(N); vector>to(N); for(int i=0;i>m; for(int j=0;j>a; a--; G.add_edge(i,a); to[i].push_back(a); } } vector>S=G.scc(); vectorid(N); int L=S.size(); for(int i=0;i>g(L); for(int i=0;iflag(L); vectordp(L,-(1<<30)); auto f=[&](auto f,int x)-> int { if(flag[x])return dp[x]; dp[x]=1; for(auto i:g[x]){ chmax(dp[x],f(f,i)+1); } flag[x]=true; return dp[x]; }; f(f,id[0]); int ma=0; for(int i=0;i