#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int n,rudu[200010],ans=0x3f3f3f3f,tmp,dq;
vector<int>mp;
bool mk[200010];
void lun(int x){
mk[x]=0;
if(x==dq){
return;
}
tmp+=1;
lun(mp[x]);
return;
}
void del(int x){
mk[x]=0;
rudu[mp[x]]-=1;
if(rudu[mp[x]]==0){
del(mp[x]);
}
return;
}
int main(){
memset(mk,1,sizeof(mk));
cin>>n;
int to;
for(int i=1;i<=n;i++){
cin>>to;
mp[i]=to;
rudu[to]+=1;
}
for(int i=1;i<=n;i++){
if(rudu[i]==0&&mk[i]){
del(i);
}
}
for(int i=1;i<=n;i++){
if(mk[i]){
tmp=0,dq=i;
lun(i);
ans=min(ans,tmp);
}
}
cout<<ans<<endl;
return 0;
}