1 #include<iostream>
2 #include<cstring>
3 #include<algorithm>
4 using namespace std;
5
6 int nextval[200010];
7 int fcnt[200010];
8 bool vis1[200010], vis2[200010];
9 int minmum = 0x3f3f3f3f;
10
11 void dfs(int num, int cnt)
12 {
13 if (vis1[num]) return;
14 if (vis2[num])
15 {
16 minmum = min(minmum, cnt - fcnt[num]);
17 return;
18 }
19 vis2[num] = true;
20 fcnt[num] = cnt;
21 dfs(nextval[num], cnt + 1);
22 vis1[num] = true;
23 }
24
25 int main()
26 {
27 int n;
28 cin >> n;
29 for (int i = 1; i <= n; i++)
30 {
31 cin >> nextval[i];
32 }
33 for (int i = 1; i <= n; i++)
34 {
35 dfs(i, 0);
36 }
37 cout << minmum;
38 }