#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); flag[id[0]]=true; queueq; q.push(id[0]); vectordp(L,-(1<<30)); dp[id[0]]=1; while(q.size()){ int x=q.front(); q.pop(); for(auto i:g[x]){ if(!flag[i]){ flag[i]=true; chmax(dp[i],dp[x]+1); q.push(i); } } } int ma=0; for(int i=0;i