#include using namespace std ; const int maxn = 1e5 + 5; vector g[maxn] ; int n[maxn] ; int dis[maxn] ; bool mark[maxn]; int b = 0 , c = 0; void bfs(int u){ mark[u] = true ; queue q ; q.push(u) ; dis[u] = 0 ; while (!q.empty()){ int v = q.front(); for (auto w : g[v]){ if (!mark[w]){ mark[w] = true ; q.push(w) ; dis[w] = dis[v] + 1 ; if (dis[w] > b ){ b = dis[w]; } } } q.pop() ; } } int main (){ int t , m ; cin >> t ; int a[t] ; for (int i = 0 ; i < t ; i++){ cin >> a[i] ; if (a[i] == -1){ n[c] = i ; c++ ; } m = a[i] ; g[i].push_back(m) ; g[m].push_back(i) ; } for (int i = 0 ; i < c ; i++){ bfs(n[i]) ; } cout << b ; }