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

#define MAXN 100001

using namespace std;

struct Par
{
    int a,b;
};

void ispis(vector <Par> &y)
{
    for(int i=0;i<y.size();i++)
        cout<<y[i].a<<" "<<y[i].b<<endl;
}

void dubina(vector <int> x[],int n,vector <Par> &y,int t,int p)
{
    int m=0,b=1;
    for(int i=0;i<x[t].size();i++)
        if(x[t][i]!=p){
            dubina(x,n,y,x[t][i],t);
            if(y[x[t][i]].a>m){
                m=y[x[t][i]].a;
                b=y[x[t][i]].b;
            }
            else
                if(y[x[t][i]].a==m)
                    b+=y[x[t][i]].b;
        }
    y[t].a=m+1;
    y[t].b=b;
}

int pomocna(vector <int> x[],int n,vector <Par> &y,int t,int p)
{
    int m1=0,m2=0;
    for(int i=0;i<x[t].size();i++)
        if(x[t][i]!=p)
            if(y[x[t][i]].a>m1)
            {
                m2=m1;
                m1=y[x[t][i]].a;
            }
            else
                if(y[x[t][i]].a>m2)
                    m2=y[x[t][i]].a;
    return m1+m2+1;
}

Par nadji_max(vector <int> x[],int n,vector <Par> &y,int t,int p)
{
    Par a,c;
    vector <Par> b;
    a.a=pomocna(x,n,y,t,p);
    a.b=t;
    for(int i=0;i<x[t].size();i++)
        if(x[t][i]!=p)
            b.push_back(nadji_max(x,n,y,x[t][i],t));
    for(int i=0;i<b.size();i++)
        if(b[i].a>a.a)
            a=b[i];
    return a;
}

int main()
{
    int n,a,b,m1=0,m2=0,br=0;
    Par m;
    vector <int> x[MAXN];
    scanf("%d",&n);
    vector <Par> y(n+1);
    for(int i=0;i<n-1;i++)
    {
        scanf("%d %d",&a,&b);
        x[a].push_back(b);
        x[b].push_back(a);
    }
    dubina(x,n,y,1,0);
    //ispis(y);
    m=nadji_max(x,n,y,1,0);
    /*cout<<m.a<<" "<<m.b<<endl<<endl;
    for(int i=0;i<x[m.b].size();i++)
        cout<<x[m.b][i]<<" "<<y[x[m.b][i]].a<<endl;*/
    for(int i=0;i<x[m.b].size();i++)
        if(y[x[m.b][i]].a<=y[m.b].a)
        {
            if(y[x[m.b][i]].a>m1)
            {
                m2=m1;
                m1=y[x[m.b][i]].a;
            }
            else
                if(y[x[m.b][i]].a>m2)
                    m2=y[x[m.b][i]].a;
        }
    for(int i=0;i<x[m.b].size();i++)
        if(y[x[m.b][i]].a==m1||y[x[m.b][i]].a==m2)
            br+=y[x[m.b][i]].b;
    /*cout<<m1<<" "<<m2<<endl;
    cout<<br<<" "<<n<<endl;*/
    m.a--;
    if(br==2||br==1)
        if(n%2==0)
            cout<<m.a-2;
        else
            cout<<m.a-1;
    else
        if(br==3)
            if(n%2==0)
                cout<<m.a-1;
            else
                cout<<m.a;
        else
            cout<<m.a;

    return 0;
}