#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int>g[100005];
int start;
int d[100005];
void dfs(int u,int fa){
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
if(v==fa) continue;
d[v]=max(d[v],d[u]+1);
dfs(v,u);
}
}
main(){
int n;
cin>>n;
for(int i=1;i<n;i++){
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
start=u;
}
dfs(start,0);
int ans=start;
int maxn=0;
for(int i=1;i<=n;i++){
if(maxn<d[i]){
maxn=d[i];
ans=i;
}
}
memset(d,0,sizeof(d));
dfs(ans,0);
for(int i=1;i<=n;i++){
if(maxn<d[i]){
maxn=d[i];
ans=i;
}
}
cout<<maxn<<endl;
return 0;
}
/*树的直径怎么改成树的中心(有一个输出1个,有两个输出两个 )