#include <bits/stdc++.h>
using namespace std;
#define MAX 100009
bool check[MAX]={false};
int total=0;
int dfs(vector<int> v[],int root)
{
int m,m1=-1,m2=-1;
check[root]=1;
for(int i=0;i<v[root].size();i++)
{
if(!check[v[root][i]]){
m = dfs(v,v[root][i]);
if(m>=m1)
{
m2= m1;
m1 = m;
}
else if(m>m2)
m2=m;
}
}
total = max(total , m1+m2+2);
return (m1 + 1);
}
int main()
{
int n,a,b;
cin>>n;
vector<int> v[n+9];
for(int i=0;i<n-1;i++){
scanf("%d%d",&a,&b);
v[a].push_back(b);
v[b].push_back(a);
}
dfs(v,1);
cout<<total<<endl;
}
CgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBNQVggMTAwMDA5CmJvb2wgY2hlY2tbTUFYXT17ZmFsc2V9OwppbnQgdG90YWw9MDsKaW50IGRmcyh2ZWN0b3I8aW50PiB2W10saW50IHJvb3QpCnsKICAgIGludCBtLG0xPS0xLG0yPS0xOwogICAgY2hlY2tbcm9vdF09MTsKICAgIGZvcihpbnQgaT0wO2k8dltyb290XS5zaXplKCk7aSsrKQogICAgewogICAgICAgIGlmKCFjaGVja1t2W3Jvb3RdW2ldXSl7CiAgICAgICAgICAgIG0gPSBkZnModix2W3Jvb3RdW2ldKTsKICAgICAgICAgICAgaWYobT49bTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG0yPSBtMTsKICAgICAgICAgICAgICAgIG0xID0gbTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKG0+bTIpCiAgICAgICAgICAgICAgICBtMj1tOwogICAgICAgIH0KICAgIH0KICAgIHRvdGFsID0gbWF4KHRvdGFsICwgbTErbTIrMik7CiAgICByZXR1cm4gKG0xICsgMSk7Cn0KaW50IG1haW4oKQp7CiAgICBpbnQgbixhLGI7CiAgICBjaW4+Pm47CiAgICB2ZWN0b3I8aW50PiB2W24rOV07CiAgICBmb3IoaW50IGk9MDtpPG4tMTtpKyspewogICAgICAgIHNjYW5mKCIlZCVkIiwmYSwmYik7CiAgICAgICAgdlthXS5wdXNoX2JhY2soYik7CiAgICAgICAgdltiXS5wdXNoX2JhY2soYSk7CiAgICB9CiAgICBkZnModiwxKTsKICAgIGNvdXQ8PHRvdGFsPDxlbmRsOwp9Cg==