#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
vector<int>adj[maxn];
int dp[maxn],dep[maxn];
void dfs(int cur,int fa){
dep[cur]=dp[cur]=1;
int x=0,y=0;
for(auto &nxt:adj[cur]){
if(nxt==fa) continue;
dfs(nxt,cur);
dep[cur]=max(dep[cur],dep[nxt]+1);
dp[cur]=max(dp[cur],dp[nxt]);
if(dep[nxt]>x){
y=x;
x=dep[nxt];
}else if(dep[nxt]>y){
y=dep[nxt];
}
}
dp[cur]=max(dp[cur],x+y+1);
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
int u,v;
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1,0);
cout<<dp[1]-1<<endl;
}