#2RE,其余全T,为何?
#include <iostream>
#define debug(x) std::cout << #x << " = " << x << '\n'
struct node{
int val;
node* left = nullptr;
node* right = nullptr;
node(){}
node(int _val):val(_val){}
}Tree;
node* buildTree(int val){return val ? new node(val) : nullptr;}
node* findTree(int val,node* tree = &Tree){
node* ans = nullptr;
if (tree->val == val) return tree;
if (tree->left != nullptr) ans = findTree(val,tree->left);
if (ans != nullptr) return ans;
if (tree->right != nullptr) ans = findTree(val,tree->right);
return ans;
}
int TreeDeep(node* tree = &Tree){
int ans = 1;
if (tree->left != nullptr) ans = std::max(ans,1 + TreeDeep(tree->left));
if (tree->right != nullptr) ans = std::max(ans,1 + TreeDeep(tree->right));
return ans;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("P4913.in","r",stdin);
#endif
std::cin.tie(0)->sync_with_stdio(0);
int n,l,r;
std::cin >> n >> l >> r;
Tree.left = buildTree(l);
Tree.right = buildTree(r);
for (int i = 2;i <= n;i++){
std::cin >> l >> r;
node* tmp = findTree(i);
tmp->left = buildTree(l);
tmp->right = buildTree(r);
}
std::cout << TreeDeep() << '\n';
return 0;
}