#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi1;
typedef vector<vi1> vi2;

void stampa(vi2& mat, int& n)
 { int i, k;
   for(i=1;i<=n;i++)//stampa
    { cout<<endl;
      for(k=1;k<i;k++) cout<<mat[i][k]<<' ';
    }
 }

int main()
{ ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int i, k, n, val, tmp, x, y, maxa, broj, par, gub, bar, red;
  cin>>n;
  par=n%2;//da li je paran
  vi2 mat(n+1);//just number of rows
  vi2 gra(n+1, vi1(2));
  for(i=0;i<=n;i++) mat[i]=vi1(i+1, n);//donja dijagonala, svi na n
  for(i=1;i<n;i++)//unosi grane
   { cin>>x>>y;
     if(x<y) {tmp=x;x=y;y=tmp;}//prva kordinata veca
      { mat[x][y]=1;//prva kordinata veca
        gra[i][0]=x;gra[i][1]=y;
      }
   }
  //stampa(mat, n);
  for(i=1;i<n;i++)
   { x=gra[i][0];y=gra[i][1];
     for(k=x+1;k<=n;k++)//po x
       if(mat[k][x]<n)
         {if(mat[k][y]==n)mat[k][y]=mat[k][x]+1;}
     for(k=x-1;k>=1;k--)
       if(mat[x][k]<n)
          if(k>y) {if(mat[k][y]==n) mat[k][y]=mat[x][k]+1;}
             else {if(mat[y][k]==n) mat[y][k]=mat[x][k]+1;}
     for(k=y+1;k<=n;k++)//po y
       if(mat[k][y]<n)
          if(k>x) {if(mat[k][x]==n) mat[k][x]=mat[k][y]+1;}
             else {if(mat[x][k]==n) mat[x][k]=mat[k][y]+1;}
     for(k=y-1;k>=1;k--)
       if(mat[y][k]<n)
            {if(mat[x][k]==n)mat[x][k]=mat[y][k]+1;}
    }
  //stampa(mat, n);
  //trazimo max put
  maxa=1; broj=1;//najv.razdaljina i koliko ih ima
  for(i=1;i<=n;i++)
    for(k=1;k<=i-1;k++)
     { val=mat[i][k];
         if(val>maxa){maxa=val; broj=1;}
         else if(val==maxa) broj++;
     }
  //cout<<"\nmaxa = "<<maxa<<" broj = "<<broj<<"\n";
  if(broj==1)//samo jedan lanac, mora opet za k-1
     { if(par==0)//mora i k-1
        { maxa--;//sled manja
          bar=0; //koliko sa bar 2
          for(i=1;i<=n;i++)
           { red=0;//koliko u redu
             for(k=1;k<=i-1;k++)
               if(mat[i][k]==maxa) red++;
             for(k=i+1;k<=n;k++)
               if(mat[k][i]==maxa) red++;
             if(red>1) bar++;
               if(bar>1){i=n+1; break;}
           }
          if(bar>1) cout<<maxa; //k-1 daje bolje
          else cout<<maxa-1;
        }
       else cout<<maxa-1;//za nepar moze odmah
     }
  else//gledamo da li ima bar 2 sa 2 ili vise
   { bar=0; //koliko sa bar 2
     for(i=1;i<=n;i++)
       { red=0;//koliko u redu
         for(k=1;k<=i-1;k++)
           if(mat[i][k]==maxa) red++;
         for(k=i+1;k<=n;k++)
           if(mat[k][i]==maxa) red++;
         if(red>1) bar++;
         if(bar>3){i=n+1; break;}
       }
     //cout<<"bar = "<<bar<<"\n";
     if(bar>3) gub=0; //nista se ne gubi
     else gub=1-par;//koliko se gubi zavisno od para
     cout<<maxa-gub;
   }
  return 0;
}