#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5, M = 2e4 + 5, OO = 0x3f3f3f3f;
int head[N], nxt[M], to[M], ne, vis[N], mxDis, mxNode;
int n, u, v;
void init(){
memset(head, -1, n*sizeof head[0]);
ne = 0;
}
void addEdge(int f, int t){
nxt[ne] = head[f];
to[ne] = t;
head[f] = ne++;
}
void addBiEdge(int u, int v){
addEdge(u, v);
addEdge(v, u);
}
void DFS(int u, int d = 0){
if(vis[u]) return;
vis[u] = 1;
for(int k = head[u]; ~k; k = nxt[k]){
int v = to[k];
DFS(v, d+1);
}
if(d > mxDis){
mxDis = d;
mxNode = u;
}
}
int main(){
scanf("%d", &n);
init();
for(int i = 0; i < n-1; ++i){
scanf("%d %d", &u, &v);
addBiEdge(--u, --v);
}
DFS(0);
memset(vis, 0, n*sizeof vis[0]);
mxDis = 0;
DFS(mxNode);
printf("%d\n", mxDis);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDFlNCArIDUsIE0gPSAyZTQgKyA1LCBPTyA9IDB4M2YzZjNmM2Y7CgppbnQgaGVhZFtOXSwgbnh0W01dLCB0b1tNXSwgbmUsIHZpc1tOXSwgbXhEaXMsIG14Tm9kZTsKaW50IG4sIHUsIHY7Cgp2b2lkIGluaXQoKXsKCW1lbXNldChoZWFkLCAtMSwgbipzaXplb2YgaGVhZFswXSk7CgluZSA9IDA7Cn0KCnZvaWQgYWRkRWRnZShpbnQgZiwgaW50IHQpewoJbnh0W25lXSA9IGhlYWRbZl07Cgl0b1tuZV0gPSB0OwoJaGVhZFtmXSA9IG5lKys7Cn0KCnZvaWQgYWRkQmlFZGdlKGludCB1LCBpbnQgdil7CglhZGRFZGdlKHUsIHYpOwoJYWRkRWRnZSh2LCB1KTsKfQoKdm9pZCBERlMoaW50IHUsIGludCBkID0gMCl7CglpZih2aXNbdV0pIHJldHVybjsKCXZpc1t1XSA9IDE7Cglmb3IoaW50IGsgPSBoZWFkW3VdOyB+azsgayA9IG54dFtrXSl7CgkJaW50IHYgPSB0b1trXTsKCQlERlModiwgZCsxKTsKCX0KCWlmKGQgPiBteERpcyl7CgkJbXhEaXMgPSBkOwoJCW14Tm9kZSA9IHU7Cgl9Cn0KCmludCBtYWluKCl7CglzY2FuZigiJWQiLCAmbik7Cglpbml0KCk7Cglmb3IoaW50IGkgPSAwOyBpIDwgbi0xOyArK2kpewoJCXNjYW5mKCIlZCAlZCIsICZ1LCAmdik7CgkJYWRkQmlFZGdlKC0tdSwgLS12KTsKCX0KCURGUygwKTsKCW1lbXNldCh2aXMsIDAsIG4qc2l6ZW9mIHZpc1swXSk7CglteERpcyA9IDA7CglERlMobXhOb2RlKTsKCXByaW50ZigiJWRcbiIsIG14RGlzKTsKCXJldHVybiAwOwp9