#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int creat(BiTree &T){
int left,right;
scanf("%d%d",&left,&right);
if(left==0){
T->lchild=NULL;
}else{
T->lchild=(BiTree)malloc(sizeof(BiTNode));
T->lchild->data=left;
}
if(right==0){
T->rchild=NULL;
}else{
T->rchild=(BiTree)malloc(sizeof(BiTNode));
T->rchild->data=right;
}
if(T->lchild) creat(T->lchild);
if(T->rchild) creat(T->rchild);
}
int depth(BiTree T){
if(T==NULL) return 0;
int ld=depth(T->lchild);
int rd=depth(T->rchild);
if(ld>rd) return ld+1;
else return rd+1;
}
int main(){
BiTree T;
T=(BiTree)malloc(sizeof(BiTNode));
T->data=1;
int n;
scanf("%d",&n);
creat(T);
printf("%d",depth(T));
}