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