You are given a rooted undirected tree consisting of $n$ vertices. Vertex $1$ is the root.

Let's denote a depth array of vertex $x$ as an infinite sequence $[d_{x, 0}, d_{x, 1}, d_{x, 2}, \dots]$, where $d_{x, i}$ is the number of vertices $y$ such that both conditions hold:
 -  $x$ is an ancestor of $y$; -  the simple path from $x$ to $y$ traverses exactly $i$ edges. 
The dominant index of a depth array of vertex $x$ (or, shortly, the dominant index of vertex $x$) is an index $j$ such that:
 -  for every $k &lt; j$, $d_{x, k} &lt; d_{x, j}$; -  for every $k &gt; j$, $d_{x, k} \le d_{x, j}$. 
For every vertex in the tree calculate its dominant index.
The first line contains one integer $n$ ($1 \le n \le 10^6$) — the number of vertices in a tree.

Then $n - 1$ lines follow, each containing two integers $x$ and $y$ ($1 \le x, y \le n$, $x \ne y$). This line denotes an edge of the tree.

It is guaranteed that these edges form a tree.
4
1 2
2 3
3 4
0
0
0
0
4
1 2
1 3
1 4
1
0
0
0
4
1 2
2 3
2 4
2
1
0
0
1
0
2
1 2
0
0
from collections import defaultdict, deque
import sys
input = sys.stdin.readline

def bfs(s):
    q = deque()
    q.append(s)
    dist = [-1] * (n + 1)
    dist[s] = 0
    p = []
    parent = [-1] * (n + 1)
    while q:
        i = q.popleft()
        di = dist[i]
        p.append(i)
        for j in G[i]:
            if dist[j] == -1:
                dist[j] = di + 1
                q.append(j)
                parent[j] = i
    return dist, p, parent

n = int(input())
G = [[] for _ in range(n + 1)]
for _ in range(n - 1):
    x, y = map(int, input().split())
    G[x].append(y)
    G[y].append(x)
dist, p, parent = bfs(1)
childcnt = [1] * (n + 1)
child = [[] for _ in range(n + 1)]
mc = [-1] * (n + 1)
mx = [0] * (n + 1)
d = [dict() for _ in range(n + 1)]
md = [-1] * (n + 1)
ans = [0] * n
while p:
    i = p.pop()
    pi, ci = parent[i], childcnt[i]
    childcnt[pi] += ci
    child[pi].append(i)
    if mx[pi] < ci:
        mx[pi], mc[pi] = ci, i
    if ci == 1:
        x = defaultdict(lambda : 0)
        x[dist[i]] = 1
        md[i] = dist[i]
        d[i] = x
    else:
        m, mi = 0, 0
        for j in child[i]:
            mdj = md[j]
            if m < d[j][mdj]:
                m, mi = d[j][mdj], mdj
            elif m == d[j][mdj]:
                mi = min(mi, mdj)
        d[mc[i]], d[i] = d[i], d[mc[i]]
        for j in child[i]:
            for k, l in d[j].items():
                d[i][k] += l
                if m < d[i][k]:
                    m, mi = d[i][k], k
                elif m == d[i][k]:
                    mi = min(mi, k)
        k = dist[i]
        d[i][k] += 1
        if m < d[i][k]:
            m, mi = d[i][k], k
        elif m == d[i][k]:
            mi = min(mi, k)
        ans[i - 1] = mi - dist[i]
        md[i] = mi
print("\n".join(map(str, ans)))