//洛谷P2661求最小环用拓扑写,内含拓扑实现
#include<bits/stdc++.h>
#define MAX 200004
#define INF 0x3f3f3f
using namespace std;
int n,T,ro[MAX],ans=INF,dep;
bool b[MAX];
vector<int>G[MAX];
int getdata()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&T);
G[i].push_back(T);
ro[T]++;
}
}
void Topo()
{
queue<int>q;
for(int i=1;i<=n;i++)
{
if(!ro[i])
{
b[i]=1;
q.push(i);
}
}
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
ro[v]--;
if(!ro[v])
{
q.push(v);
b[v]=1;
}
}
}
}
void dfs(int u)
{
b[u]=1;
dep++;
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(b[v])continue;
b[v]=1;
dfs(v);
}
}
int deal()
{
for(int i=1;i<=n;i++)
{
dep=0;
if(!b[i])dfs(i);
if(dep)ans=min(dep,ans);
}
printf("%d\n",ans);
}
int main()
{
getdata();
Topo();
deal();
return 0;
}