#include <bits/stdc++.h>
using namespace std;
static const int N = 200005;
vector<int> adj[N];
int visited[N], level[N];
vector<pair<int,int>>v;
bool cmp(pair<int,int>a, pair<int,int>b)
{
return a.second>b.second;
}
void dfs(int node)
{
visited[node] = 1;
for(auto x:adj[node])
{
if(visited[x]==0)
{
level[x] = level[node]+1;
v.push_back({x,level[x]});
dfs(x);
}
}
return;
}
int main() {
int n; cin >> n;
if(n==1) { cout<<0<<endl; return 0; }
for(int i=1; i<n; i++)
{
int u,v; cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1);
sort(v.begin(),v.end(),cmp);
int x = v[0].first;
v.clear();
for(int i=0; i<N; i++) { visited[i]=0; level[i]=0; }
dfs(x);
sort(v.begin(),v.end(),cmp);
int ans = v[0].second;
cout<<ans<<endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKc3RhdGljIGNvbnN0IGludCBOID0gMjAwMDA1Owp2ZWN0b3I8aW50PiBhZGpbTl07CiAKaW50IHZpc2l0ZWRbTl0sIGxldmVsW05dOwp2ZWN0b3I8cGFpcjxpbnQsaW50Pj52OwogCmJvb2wgY21wKHBhaXI8aW50LGludD5hLCBwYWlyPGludCxpbnQ+YikKewogICAgcmV0dXJuIGEuc2Vjb25kPmIuc2Vjb25kOwp9CiAKdm9pZCBkZnMoaW50IG5vZGUpCnsKICAgIHZpc2l0ZWRbbm9kZV0gPSAxOwogCiAgICBmb3IoYXV0byB4OmFkaltub2RlXSkKICAgIHsKICAgICAgICBpZih2aXNpdGVkW3hdPT0wKQogICAgICAgIHsKICAgICAgICAgICBsZXZlbFt4XSA9IGxldmVsW25vZGVdKzE7CiAgICAgICAgICAgdi5wdXNoX2JhY2soe3gsbGV2ZWxbeF19KTsKICAgICAgICAgICBkZnMoeCk7CiAgICAgICAgfQogICAgfQogCnJldHVybjsKfQogCiAKaW50IG1haW4oKSB7CiAKaW50IG47IGNpbiA+PiBuOwogCmlmKG49PTEpIHsgY291dDw8MDw8ZW5kbDsgcmV0dXJuIDA7IH0KIApmb3IoaW50IGk9MTsgaTxuOyBpKyspCnsKICAgIGludCB1LHY7IGNpbiA+PiB1ID4+IHY7CiAgICBhZGpbdV0ucHVzaF9iYWNrKHYpOwogICAgYWRqW3ZdLnB1c2hfYmFjayh1KTsKfQogCmRmcygxKTsKIApzb3J0KHYuYmVnaW4oKSx2LmVuZCgpLGNtcCk7CiAKaW50IHggPSB2WzBdLmZpcnN0Owp2LmNsZWFyKCk7CiAKZm9yKGludCBpPTA7IGk8TjsgaSsrKSB7IHZpc2l0ZWRbaV09MDsgbGV2ZWxbaV09MDsgfQogCmRmcyh4KTsKIApzb3J0KHYuYmVnaW4oKSx2LmVuZCgpLGNtcCk7CiAKaW50IGFucyA9IHZbMF0uc2Vjb25kOwogCmNvdXQ8PGFuczw8ZW5kbDsKIApyZXR1cm4gMDsKfQo=