#include <cstdio>
#include <algorithm>
using namespace std;
const int N=1e6+10;
int l[N],r[N],n;//l数组左子树,r数组右子树
int dfs(int root){
if(root==0) return 0;//节点为0时,深度为0
int left=dfs(l[root]);//接受左子树的深度
int right=dfs(r[root]);//接受右子树的深度
return max(left,right)+1;//最大深度是左右子树最大值加1
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&l[i],&r[i]);
}
printf("%d\n",dfs(1));
return 0;
}