#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> fav;
vector<int> cur;
vector<int>::iterator it;
int res=0;
bool finshed=false;
bool flag;
void dfs(int i)
{
if(finshed)
{
if(flag)
res=((res>cur.size())?res:cur.size());
cur.clear();
return;
}
/*
1.该小朋友崇拜的人已在数组中
1.1是第一个小朋友
1.2不是第一个小朋友
2.
*/
it=find(cur.begin(),cur.end(),fav[i]);
if(it==cur.begin())
{
finshed=true;
flag=true;
cur.push_back(fav[i]);
}else if(it==cur.end())
{
cur.push_back(fav[i]);
}else
{
finshed=true;
flag=false;
}
dfs(fav[i]);
}
/*
如果该小朋友崇拜的是自己怎么办?
*/
int main()
{
int n;cin>>n;
fav.resize(n+1);
for(int i=1;i<=n;i++)
cin>>fav[i];
for(int i=1;i<=n;i++)
{
finshed=false;
if(fav[i]!=i)
dfs(i);
}
return 0;
}