#include <bits/stdc++.h>
using namespace std;
static const int N = 200005;
vector<int> adj[N];
int arr[N], visited[N], root;
int dfs(int node)
{
visited[node] = 1;
vector<int>v; v.push_back(0);
for(auto x:adj[node])
{
if(visited[x]==0)
{
v.push_back(dfs(x));
}
}
if(v.size()==1)
{
arr[node] = 0;
return 1;
}
sort(v.rbegin(), v.rend());
arr[node] = v[0] + v[1];
if(node==root) return arr[root];
return v[0]+1;
}
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);
}
root = 1;
int ans = dfs(root);
for(int i=1; i<=n; i++) ans = max(ans,arr[i]);
cout<<ans<<endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKc3RhdGljIGNvbnN0IGludCBOID0gMjAwMDA1Owp2ZWN0b3I8aW50PiBhZGpbTl07CiAKaW50IGFycltOXSwgdmlzaXRlZFtOXSwgcm9vdDsKIAppbnQgZGZzKGludCBub2RlKQp7CiAgICB2aXNpdGVkW25vZGVdID0gMTsKICAgIHZlY3RvcjxpbnQ+djsgdi5wdXNoX2JhY2soMCk7CiAgICAKICAgIGZvcihhdXRvIHg6YWRqW25vZGVdKQogICAgewogICAgICAgIGlmKHZpc2l0ZWRbeF09PTApCiAgICAgICAgewogICAgICAgICAgICB2LnB1c2hfYmFjayhkZnMoeCkpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgaWYodi5zaXplKCk9PTEpCiAgICB7CiAgICAgYXJyW25vZGVdID0gMDsKICAgICByZXR1cm4gMTsKICAgIH0KICAgIAogICAgc29ydCh2LnJiZWdpbigpLCB2LnJlbmQoKSk7CiAgICBhcnJbbm9kZV0gPSB2WzBdICsgdlsxXTsKICAgIAogICAgaWYobm9kZT09cm9vdCkgcmV0dXJuIGFycltyb290XTsgCiAgICByZXR1cm4gdlswXSsxOwp9CiAKaW50IG1haW4oKSB7CiAKaW50IG47IGNpbiA+PiBuOwogCmlmKG49PTEpIHsgY291dDw8MDw8ZW5kbDsgcmV0dXJuIDA7IH0KIApmb3IoaW50IGk9MTsgaTxuOyBpKyspCnsKICAgIGludCB1LHY7IGNpbiA+PiB1ID4+IHY7CiAgICBhZGpbdV0ucHVzaF9iYWNrKHYpOwogICAgYWRqW3ZdLnB1c2hfYmFjayh1KTsKfQogCnJvb3QgPSAxOwppbnQgYW5zID0gZGZzKHJvb3QpOwogCmZvcihpbnQgaT0xOyBpPD1uOyBpKyspIGFucyA9IG1heChhbnMsYXJyW2ldKTsgCiAKY291dDw8YW5zPDxlbmRsOwogCnJldHVybiAwOwp9