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

typedef long long ll;
const ll MOD = 1e9+7;
const int N = 1e5+5;

int n;
vector<int>v[N];
int u,d,leaf;
vector<int>a;

bool line(){
    int cnt=0;
    for(int i=1;i<=n;i++){
        if((int)v[i].size()==1)cnt++;
        else if((int)v[i].size()>2)return false;
    }

    return cnt==2;
}

void dfs(int s,int p,int dist){
    if(dist>d){
        d=dist;
        u=s;
    }
    for(auto e:v[s]){
        if(e!=p){
            dfs(e,s,dist+1);
        }
    }
}

void f(int s,int p,int dist){
    if(v[s].size()==1)leaf++;
    if(dist==d)a.push_back(s);
    for(auto e:v[s]){
        if(e!=p)f(e,s,dist+1);
    }
}

int main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin>>n;
    for(int i=1;i<=n-1;i++){
        int a,b;
        cin>>a>>b;
        v[a].push_back(b);
        v[b].push_back(a);
    }

    if(line()){
        if(n%2==1)cout<<n-2;
        else cout<<n-3;
        return 0;
    }else{
        dfs(1,-1,0);
        d=0;
        dfs(u,-1,0);
        f(u,-1,0);

        if(a.size()>=3)cout<<d;
        else{
            int played=n-leaf;
            int turn=1;
            if(played%2==1)turn=0;

            if(a.size()==1){
                cout<<d-1;
            }else{
                if(turn==1)cout<<d;
                else cout<<d-1;
            }
        }
    }

    return 0;
}