#include<iostream>
#include<vector>
using namespace std;
struct node {
vector<int> son;
};
int n, ans;
bool used[10009];
node tree[10009];
void dfs(int x, int y, bool u[]);
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
int u, v;
cin >> u >> v;
used[u] = used[v] = 1;
tree[u].son.push_back(v);
}
dfs(1, 0, used);
cout << ans << endl;
return 0;
}
void dfs(int x, int y, bool u[]) {
u[x] = 0;
ans = max(ans, y);
for (int i = 0; i < tree[x].son.size(); i++) {
if (u[tree[x].son[i]]) dfs(tree[x].son[i], y + 1, u);
}
}