#include<bits/stdc++.h>
using namespace std;
const int N=2e3+10;
int n;
vector<int> root;
vector<int> ad[N];
int dfs(int x){
if(ad[x].empty()){
return 1;
}
int ma_length=0;
for(int i=0;i<ad[x].size();i++){
ma_length=max(ma_length,dfs(ad[x][i]));
}
return ma_length+1;
}
void solve(){
int ma=0;
for(int i=0;i<root.size();i++){
ma=max(ma,dfs(root[i]));
}
cout<<ma<<endl;
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n;
int x;
for(int i=1;i<=n;i++){
cin>>x;
if(x==-1) root.push_back(i);
else ad[x].push_back(i);
}
solve();
return 0;
}