#include #include #include const int MAX_N{int(2e5+5)}; int in_degree[MAX_N]{},n,next[MAX_N]; std::queue q; bool vis[MAX_N]; int main(){ std::cin>>n; for(int i=1;i<=n;i++){ int input; std::cin>>input; in_degree[input]++; next[i]=input; } for(int i=1;i<=n;i++){ if(in_degree[i]==0){ q.push(i); } } while(q.empty()==false){ int top = q.front(); in_degree[next[top]]--; q.pop(); if(in_degree[next[top]]==0){ q.push(next[top]); } } int ans{-1}; for(int i=1;i<=n;i++){ if(in_degree[i]!=0 && vis[i]==false){ int begin{i},s{1}; int now{next[begin]}; vis[begin]=true; while(now!=begin){ vis[now]=true; s++; now=next[now]; } ans=std::max(ans,s); } } std::cout<