/**************************************************************** 
 * Description: 
 * Author: Alex Li
 * Date: 2024-01-25 07:48:28
 * LastEditTime: 2024-01-25 08:16:17
****************************************************************/
#include <iostream>
#include <vector>
using namespace std;

struct node {
    int left, right;
};
//node tree[1000000];//存储结构定义
vector<node>  tree;
int n, ans;

void dfs(int id, int deep) {
    if (id == 0) return ;//到达叶子节点时返回
    ans = max(ans, deep);//更新答案
    dfs(tree[id].left, deep+1);//向左遍历
    dfs(tree[id].right, deep+1);//向右遍历
}

int main() {
    cin >> n;
    tree.resize(n+1);
    for (int i=1; i<=n; i++) cin >> tree[i].left >> tree[i].right;//读入+建树
    dfs(1, 1);//从1号节点出发，当前深度为1
    cout << ans << endl;//输出答案
    return 0;//完结撒花！
}