#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
#define fore(i, a, n) for (int i = a; i <= n; i ++)
const int N = 200010;
int pre[N], n, dis[N], t;
int lower = 0x3f3f3f3f;
int find(int x){
if (pre[x] != x) {
pre[x] = find(pre[x]);
dis[x] += dis[pre[x]];
}
return pre[x];
}
void check(int a, int b){
// 检查 a 和 b 之间是否有连通边
int x = find(a), y = find(b);
if (find(x) == find(y)){
lower = min(lower, dis[a] + dis[b] + 1);
}
else{
pre[x] = y; // 相连两点
dis[a] = dis[b] + 1;
}
}
int main(){
//freopen("P2661_2.in", "r", stdin);
//freopen("output.txt", "w", stdout);
cin >> n;
fore(i, 1, n)
pre[i] = i;
fore(i, 1, n){
cin >> t;
check(i, t);
}
cout << lower << endl;
return 0;
}