#include<bits/stdc++.h>
using namespace std;

const long long MaxN = 1e6;

long long n;
vector<long long> a[MaxN+5];
bool visited[MaxN+5];
long long depth1[MaxN+5],depth2[MaxN+5];

void input()
{
    cin >> n;

    for(long long i=1;i<=n-1;i++)
    {
        long long u,v;
        cin >> u >> v;
        a[u].push_back(v);
        a[v].push_back(u);
    }
}

void dfs(long long i,vector<long long> a[],bool visited[],long long depth[])
{
    stack<long long> st;
    st.push(i);
    visited[i]=true;

    while(!st.empty())
    {
        long long u=st.top();
        st.pop();

        for(long long v:a[u])
        {
            if(!visited[v])
            {
                visited[v]=true;
                depth[v]=depth[u]+1;
                st.push(v);
            }
        }
    }
}

void solve()
{
    memset(visited,false,sizeof(visited));
    memset(depth1,0,sizeof(depth1));

    dfs(1,a,visited,depth1);

    long long p1=1;

    for(long long i=2;i<=n;i++)
    {
        if(depth1[i]>depth1[p1])
        {
            p1=i;
        }
    }

    memset(visited,false,sizeof(visited));
    memset(depth2,0,sizeof(depth2));

    dfs(p1,a,visited,depth2);

    long long p2=p1;

    for(long long i=2;i<=n;i++)
    {
        if(depth2[i]>depth2[p2])
        {
            p2=i;
        }
    }

    cout << depth2[p2];
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    input();
    solve();
}