import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.HashSet;
import java.util.Queue;
class PT07Z2
{ static int pop;
static boolean marked[];
static int dist;
public static void main
(String args
[]) { try {
int a,b,n;
int node
=n
=Integer.
parseInt(br.
readLine()); HashSet
<Integer
>[] hs
=new HashSet[node
]; for(int i = 0; i < node; i++){
hs[i] = new HashSet<>();
}
marked= new boolean[node];
Queue<Integer> popper= new ArrayDeque<>();
while(node>1)
{
String str
[]=br.
readLine().
split(" "); hs[a-1].add(b-1);
hs[b-1].add(a-1);
node--;
}
popper.add(0);
int present_level=1;
int next_level=0;
int from= bfs(popper, hs,present_level,next_level);
popper.add(from);
marked= new boolean[n];
dist=0;
present_level=1;
next_level=0;
int to=bfs(popper, hs,present_level,next_level);
}
}
static int bfs(Queue<Integer> popper, HashSet<Integer>[] l,int pl,int nl)
{
pop=popper.remove();
pl--;
marked[pop]=true;
for(int i:l[pop])
if(marked[i]==false)
{
popper.add(i);
nl++;
}
if(pl==0)
{pl=nl;
nl=0;
dist++;
}
if(!popper.isEmpty())
bfs(popper, l,pl,nl);
return pop;
}
}
aW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CmltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwppbXBvcnQgamF2YS51dGlsLkFycmF5RGVxdWU7CmltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKaW1wb3J0IGphdmEudXRpbC5RdWV1ZTsKCgoKCgpjbGFzcyBQVDA3WjIKeyAgc3RhdGljIGludCBwb3A7CiAgICBzdGF0aWMgIGJvb2xlYW4gbWFya2VkW107CgoKICBzdGF0aWMgaW50IGRpc3Q7CiAgCnB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIAp7ICAgdHJ5IHsKICAgIGludCBhLGIsbjsKICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7CiAgICAgICAgaW50IG5vZGU9bj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwogICAgICAgIEhhc2hTZXQ8SW50ZWdlcj5bXSBocz1uZXcgSGFzaFNldFtub2RlXTsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbm9kZTsgaSsrKXsKICAgICAgICAgICAgaHNbaV0gPSBuZXcgSGFzaFNldDw+KCk7CiAgICAgICAgfSAgICAgIAogICAgICAgIG1hcmtlZD0gbmV3IGJvb2xlYW5bbm9kZV07ClF1ZXVlPEludGVnZXI+IHBvcHBlcj0gbmV3IEFycmF5RGVxdWU8PigpOwogICAgICAgIHdoaWxlKG5vZGU+MSkKICAgICAgICB7CiAgICAgICAgICAgIFN0cmluZyBzdHJbXT1ici5yZWFkTGluZSgpLnNwbGl0KCIgIik7CiAgICAgICAgICAgIGE9SW50ZWdlci5wYXJzZUludChzdHJbMF0pOwogICAgICAgICAgICBiPUludGVnZXIucGFyc2VJbnQoc3RyWzFdKTsKICAgICAgICAgICAgaHNbYS0xXS5hZGQoYi0xKTsKICAgICAgICAgICAgaHNbYi0xXS5hZGQoYS0xKTsKICAgICAgICAgICAgbm9kZS0tOwogICAgICAgIH0gIAogICAgICAgIHBvcHBlci5hZGQoMCk7CiAgICBpbnQgcHJlc2VudF9sZXZlbD0xOwogICAgICAgIGludCBuZXh0X2xldmVsPTA7CiAgICAgICAgaW50IGZyb209ICBiZnMocG9wcGVyLCAgaHMscHJlc2VudF9sZXZlbCxuZXh0X2xldmVsKTsKICAgICAgICBwb3BwZXIuYWRkKGZyb20pOwogICAgICAgIG1hcmtlZD0gbmV3IGJvb2xlYW5bbl07CiAgICAgICAgZGlzdD0wOwogICAgICAgIHByZXNlbnRfbGV2ZWw9MTsKICAgICAgICBuZXh0X2xldmVsPTA7CiAgICAgIGludCB0bz1iZnMocG9wcGVyLCBocyxwcmVzZW50X2xldmVsLG5leHRfbGV2ZWwpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihkaXN0LTEpOwogICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKCiAKICAgIH0KfQpzdGF0aWMgaW50IGJmcyhRdWV1ZTxJbnRlZ2VyPiBwb3BwZXIsIEhhc2hTZXQ8SW50ZWdlcj5bXSBsLGludCBwbCxpbnQgbmwpCnsgCiBwb3A9cG9wcGVyLnJlbW92ZSgpOwogcGwtLTsKIAoKCm1hcmtlZFtwb3BdPXRydWU7CmZvcihpbnQgaTpsW3BvcF0pCiAgICBpZihtYXJrZWRbaV09PWZhbHNlKQogICAgewogICAgICAgCiAgICAgICAgcG9wcGVyLmFkZChpKTsKICAgICAgICBubCsrOwogIAogICAgCiAgICB9CgppZihwbD09MCkKe3BsPW5sOwoKCm5sPTA7CmRpc3QrKzsKfSAgIAoKICAgIGlmKCFwb3BwZXIuaXNFbXB0eSgpKQogICAgYmZzKHBvcHBlciwgbCxwbCxubCk7CiAgICAKICAgCnJldHVybiBwb3A7Cn0KfQ==