import sys

def calcdist(adj_list, visited, stack, d):
    node = stack.pop()
    if visited[node]:
        return
    visited[node] = True
    for e in adj_list[node]:
        if visited[e] == False:
            stack.append(e)
            d[e] = d[node] + 1
    return

def answer(n, u, v):
    
    adj_list = [[] for _ in range(n+1)] #first [] will never be filled.
    for i in range(n-1):
        adj_list[v[i]].append(u[i])
        adj_list[u[i]].append(v[i])
    leaf = [False for _ in range(n+1)]
    label = [10**6 for _ in range(n+1)]
    next_label = 0
    for i in range(1, n+1):
        if len(adj_list[i]) == 1:
            leaf[i] = True
            label[i] = next_label
            next_label += 1
    for i in range(1, n+1):
        if leaf[i] == False:
            label[i] = next_label
            next_label += 1
    
    visited = [False for _ in range(n+1)] #node 0 False forever. Only 1-n of interest.
    stack = [1]
    d = [0 for _ in range(n+1)]
    while len(stack) > 0:
        calcdist(adj_list, visited, stack, d)
    
    #print('d=', d)
    for i in range(n-1):
        if d[v[i]] > d[u[i]]:
            print(label[v[i]])
        else:
            print(label[u[i]])
    
    return

def main():
    n = int(sys.stdin.readline())
    u = [0 for i in range(n-1)]
    v = [0 for i in range(n-1)]
    for i in range(n-1):
        u[i], v[i] = map(int, sys.stdin.readline().split())
    answer(n, u, v)
    return
main()