/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
Scanner sc
= new Scanner
(System.
in);
int n = sc.nextInt(); // number of nodes
List
<Integer
>[] child
= new List[n
+ 1]; for (int i = 0; i <= n; i++) {
child[i] = new ArrayList<>();
}
// Read n-1 edges
for (int i = 0; i < n - 1; i++) {
int u = sc.nextInt();
int v = sc.nextInt();
child[u].add(v);
child[v].add(u);
}
int[] used = new int[n + 1];
int[] parent = new int[n + 1];
int[] height = new int[n + 1];
dfs(child, 0, used, parent, height);
System.
out.
println("Height of tree rooted at node 0: " + height
[0]); }
public static void dfs(List<Integer>[] child, int node, int[] used, int[] parent, int[] height) {
used[node] = 1;
for (int v : child[node]) {
if (used[v] == 0) {
parent[v] = node;
dfs(child, v, used, parent, height);
}
}
int h = 0;
for (int v : child[node]) {
if (v == parent[node]) continue;
h
= Math.
max(h, height
[v
]); }
height[node] = 1 + h;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCSBTY2FubmVyIHNjID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKCiAgICAgICAgaW50IG4gPSBzYy5uZXh0SW50KCk7IC8vIG51bWJlciBvZiBub2RlcwogICAgICAgIExpc3Q8SW50ZWdlcj5bXSBjaGlsZCA9IG5ldyBMaXN0W24gKyAxXTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgY2hpbGRbaV0gPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICB9CgogICAgICAgIC8vIFJlYWQgbi0xIGVkZ2VzCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CiAgICAgICAgICAgIGludCB1ID0gc2MubmV4dEludCgpOwogICAgICAgICAgICBpbnQgdiA9IHNjLm5leHRJbnQoKTsKICAgICAgICAgICAgY2hpbGRbdV0uYWRkKHYpOwogICAgICAgICAgICBjaGlsZFt2XS5hZGQodSk7CiAgICAgICAgfQoKICAgICAgICBpbnRbXSB1c2VkID0gbmV3IGludFtuICsgMV07CiAgICAgICAgaW50W10gcGFyZW50ID0gbmV3IGludFtuICsgMV07CiAgICAgICAgaW50W10gaGVpZ2h0ID0gbmV3IGludFtuICsgMV07CgogICAgICAgIGRmcyhjaGlsZCwgMCwgdXNlZCwgcGFyZW50LCBoZWlnaHQpOwoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlaWdodCBvZiB0cmVlIHJvb3RlZCBhdCBub2RlIDA6ICIgKyBoZWlnaHRbMF0pOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkZnMoTGlzdDxJbnRlZ2VyPltdIGNoaWxkLCBpbnQgbm9kZSwgaW50W10gdXNlZCwgaW50W10gcGFyZW50LCBpbnRbXSBoZWlnaHQpIHsKICAgICAgICB1c2VkW25vZGVdID0gMTsKCiAgICAgICAgZm9yIChpbnQgdiA6IGNoaWxkW25vZGVdKSB7CiAgICAgICAgICAgIGlmICh1c2VkW3ZdID09IDApIHsKICAgICAgICAgICAgICAgIHBhcmVudFt2XSA9IG5vZGU7CiAgICAgICAgICAgICAgICBkZnMoY2hpbGQsIHYsIHVzZWQsIHBhcmVudCwgaGVpZ2h0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaW50IGggPSAwOwogICAgICAgIGZvciAoaW50IHYgOiBjaGlsZFtub2RlXSkgewogICAgICAgICAgICBpZiAodiA9PSBwYXJlbnRbbm9kZV0pIGNvbnRpbnVlOwogICAgICAgICAgICBoID0gTWF0aC5tYXgoaCwgaGVpZ2h0W3ZdKTsKICAgICAgICB9CgogICAgICAgIGhlaWdodFtub2RlXSA9IDEgKyBoOwoJfQp9