#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <stdio.h>

using namespace std;


int mik[100000],ped[100000];


vector<vector<int> > niz(100000);
mx=0;

void DFS(int u,int pu)
{
    priority_queue<int> vrednost;
    for(int i=0; i<niz[u].size(); i++)
    {
        int v = niz[u][i];
        if(v==pu)
            continue;
        else
        {
            DFS(v,u);
            vrednost.push(mik[v]);
        }
    }

    if(!vrednost.empty())
        mik[u] += vrednost.top() +1;

    if(vrednost.size()>=2)
    {
        ped[u] = vrednost.top()+2;
        vrednost.pop();
        ped[u] +=  vrednost.top();
    }
    if(mx<max(mik[u], ped[u]))
    {
        mx=max(mik[u], ped[u]);
    }

}

int main()
{
    int n;

    cin>>n;
    for(int i=1; i<=n; i++)
    {
        mik[i] = 0;
        ped[i] = 0;
    }

    int a,b;
    for(int i=0; i<n-1; i++)
    {
        scanf("%d%d", &a, &b);
        niz[a].push_back(b);
        niz[b].push_back(a);
    }

    DFS(1,1);
    if(n%2)
    {
        cout<<mx-1;
    }
    else
    {
        cout<<mx-2;
    }


}