#include #include #include #include using std::cin,std::cout; const int MAX_N {(int)2e5+5}; int n; int next[MAX_N]; int inDegree[MAX_N]; bool vis[MAX_N]; std::queue q; int ans; int main(){ std::iostream::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr); std::cin>>n; for(int i=1;i<=n;i++){ cin>>next[i]; inDegree[next[i]]++; } const auto push_vis = [](int n){ q.push(n); vis[n]=true; }; for(int i=1;i<=n;i++){ if(inDegree[i]<=0){ push_vis(i); } } while(q.empty()==false){ int front = q.front(); q.pop(); if(--inDegree[next[front]]<=0){ push_vis(next[front]); } } for(int i=1;i<=n;i++){ if(vis[i])continue; int loop_size {0}; int start {i}; int now {start}; do{ vis[now]=true; now=next[now]; loop_size++; }while(now!=start); ans=std::max(ans,loop_size); } cout<