#include <iostream>
#include <vector>
#include <map>
using namespace std;
vector<int> Map[200001];
int dist[200001];
void dfs(int node,int parent)
{
for(int i=0;i<Map[node].size();i++)
{
if(parent != Map[node][i])
{
dist[Map[node][i]] = 1+dist[node];
dfs(Map[node][i],node);
}
}
}
int main() {
int n;
cin>>n;
for(int i=0;i<n-1;i++)
{
int a,b;
cin>>a>>b;
Map[a-1].push_back(b-1);
Map[b-1].push_back(a-1);
}
dist[0]=0;
dfs(0,-1);
int maxDist =0;
int node=0;
for(int i=0;i<n;i++)
{
if(dist[i] > maxDist)
{
maxDist = dist[i];
node=i;
}
}
for(int i=0;i<n;i++)
{
dist[i]=0;
}
dfs(node,-1);
maxDist=0;
for(int i=0;i<n;i++)
{
maxDist = max(maxDist,dist[i]);
}
cout<<maxDist<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdmVjdG9yPGludD4gTWFwWzIwMDAwMV07CmludCBkaXN0WzIwMDAwMV07Cgp2b2lkIGRmcyhpbnQgbm9kZSxpbnQgcGFyZW50KQp7Cglmb3IoaW50IGk9MDtpPE1hcFtub2RlXS5zaXplKCk7aSsrKQoJewoJCWlmKHBhcmVudCAhPSBNYXBbbm9kZV1baV0pCgkJewoJCQlkaXN0W01hcFtub2RlXVtpXV0gPSAxK2Rpc3Rbbm9kZV07CgkJCWRmcyhNYXBbbm9kZV1baV0sbm9kZSk7CgkJfQoJfQp9CgoKaW50IG1haW4oKSB7CgkKCWludCBuOwoJY2luPj5uOwoJCglmb3IoaW50IGk9MDtpPG4tMTtpKyspCgl7CgkJaW50IGEsYjsKCQljaW4+PmE+PmI7CgkJCgkJTWFwW2EtMV0ucHVzaF9iYWNrKGItMSk7CgkJTWFwW2ItMV0ucHVzaF9iYWNrKGEtMSk7Cgl9CgkKCWRpc3RbMF09MDsKCWRmcygwLC0xKTsKCQoJaW50IG1heERpc3QgPTA7CglpbnQgbm9kZT0wOwoJZm9yKGludCBpPTA7aTxuO2krKykKCXsKCQlpZihkaXN0W2ldID4gbWF4RGlzdCkKCQl7CgkJCW1heERpc3QgPSBkaXN0W2ldOwoJCQlub2RlPWk7CgkJfQoJfQoJCglmb3IoaW50IGk9MDtpPG47aSsrKQoJewoJCWRpc3RbaV09MDsKCX0KCWRmcyhub2RlLC0xKTsKCQoJbWF4RGlzdD0wOwoJZm9yKGludCBpPTA7aTxuO2krKykKCXsKCQltYXhEaXN0ID0gbWF4KG1heERpc3QsZGlzdFtpXSk7Cgl9CgkKCWNvdXQ8PG1heERpc3Q8PGVuZGw7CgkKCXJldHVybiAwOwp9