#include
#include
typedef struct node
{
int data;
struct node *next;
}Link;
void insertNode(Link *head, int data) {
Link *p = head;
Link *q = (Link *)malloc(sizeof(Link));
q->data = data;
q->next = NULL;
while(p->next != NULL) p=p->next;
p->next = q;
}
void freeNode(Link *head) {
Link *p = head->next;
Link *q;
head->next = NULL;
while(p != NULL){
q = p;
p=p->next;
free(q);
}
}
int deep(Link ** tree, int start) {
int depth = 1;
Link *p;
if(tree[start]->next == NULL) {
return depth;
}
p= tree[start]->next;
while(p!= NULL){
int tmp = deep(tree, p->data - 1);
if(tmp > depth) depth = tmp;
p=p->next;
}
return depth + 1;
}
int main(){
int count, i;
int a, b;
Link **tree;
scanf("%d", &count);
tree = (Link **)malloc(sizeof(Link*)*count);
for(i=0;i tree[i] = (Link *)malloc(sizeof(Link));
tree[i]->next = NULL;
}
while((scanf("%d%d",&a, &b))!=EOF){
if(a>0 && b>0) {
insertNode(tree[a-1], b);
}
}
printf("%d\n", deep(tree, 0));
for(i=0;i freeNode(tree[i]);
free(tree[i]);
}
free(tree);
return 0;
}