#include<bits/stdc++.h>
using namespace std;
int n,ans;
struct node{
int l,r,depth;
} a[100009];
int main(){
scanf("%d", &n);
a[1].depth = 1;
for(int i = 1;i <= n;i++){
scanf("%d%d", &a[i].l, &a[i].r);
bool is_leaf = true;
if(a[i].l != 0){
a[a[i].l].depth = a[i].depth + 1;
is_leaf = false;
}
if(a[i].r != 0){
a[a[i].r].depth = a[i].depth + 1;
is_leaf = false;
}
if(is_leaf){
ans = max(ans,a[i].depth);
}
}
printf("%d",ans);
return 0;
}