#include <fstream>
#include <vector>
#define DIM 100010
using namespace std;
ifstream fin("darb.in");
ofstream fout("darb.out");
vector<int> L[DIM];
int c[DIM],f[DIM],i,n,r,l[DIM],maxim,j,sol;
void bfs(int start){
int p=1;
int u=1;
c[1]=start;
f[start]=1;
while(p<=u){
int nod=c[p];
for(i=0;i<L[nod].size();i++)
if(f[L[nod][i]]==0){
f[L[nod][i]]=1;
c[++u]=L[nod][i];
l[L[nod][i]]=1+l[nod];
if(l[L[nod][i]]>maxim){
maxim=l[L[nod][i]];
r=L[nod][i];
}
}
p++;
}
}
int main(){
fin>>n;
while(fin>>i>>j){
L[i].push_back(j);
L[j].push_back(i);
}
i=1;
bfs(i);
for(i=1;i<=n;i++){
f[i]=0;
l[i]=0;
}
i=r;
bfs(i);
fout<<l[r]+1;
return 0;
}