#include<bits/stdc++.h>
using namespace std;
const int MAXN=200010,INF=0x7fffffff;
int n,ans=INF,start;
int vis[MAXN];
bool start[MAXN];
vector<int>G[MAXN];
void dfs(int step,int n)
{
if(step>=ans)return;
if(vis[n])
{
ans=min(step-vis[n],ans);
return;
}
for(int i=0;i<G[n].size();i++)
{
vis[n]=step+1;
dfs(step+1,G[n][i]);
vis[n]=0;
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int tmp;
scanf("%d",&tmp);
G[i].push_back(tmp);
}
for(int i=1;i<=n;i++)
{
start=i;
dfs(0,i);
}
printf("%d",ans+1);
return 0;
}
qwq