#include <bits/stdc++.h>
#define int long long
#define ff first
#define ss second
using namespace std;
bool vis[20001] = {0};
map <int, vector <int>> adj;
int dfs(int u) {
int res = 0;
for (auto v : adj[u]) {
if (vis[v]) continue;
res = max(res, dfs(v));
}
return res + 1;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(NULL);
int n;
cin >> n;
int a[n];
for (int i = 0;i < n;i++) {
cin >> a[i];
adj[a[i]].push_back(i);
}
int ans = 0;
int curr = 0;
while (curr != -1 && !vis[curr]) {
ans++;
vis[curr] = 1;
curr = a[curr];
}
if (curr == -1) {
curr = 0;
int mx = 0;
while (true) {
curr = a[curr];
for (auto v : adj[curr]) {
mx = max(mx, dfs(v));
}
if (curr == -1) break;
}
cout << ans + mx - 1 << endl;
}
else {
cout << ans + dfs(-1) - 1 << endl;
}
}