Takahashi has an ability to generate a tree using a permutation (p_1,p_2,...,p_n) of (1,2,...,n), in the following process:
First, prepare Vertex 1, Vertex 2, ..., Vertex N.
For each i=1,2,...,n, perform the following operation:
 - If p_i = 1, do nothing.
 - If p_i \neq 1, let j' be the largest j such that p_j < p_i. Span an edge between Vertex i and Vertex j'.
Takahashi is trying to make his favorite tree with this ability.
His favorite tree has n vertices from Vertex 1 through Vertex n, and its i-th edge connects Vertex v_i and w_i.
Determine if he can make a tree isomorphic to his favorite tree by using a proper permutation.
If he can do so, find the lexicographically smallest such permutation.

-----Notes-----
For the definition of isomorphism of trees, see wikipedia. Intuitively, two trees are isomorphic when they are the "same" if we disregard the indices of their vertices.

-----Constraints-----
 - 2 \leq n \leq 10^5
 - 1 \leq v_i, w_i \leq n
 - The given graph is a tree.

-----Input-----
Input is given from Standard Input in the following format:
n
v_1 w_1
v_2 w_2
:
v_{n-1} w_{n-1}

-----Output-----
If there is no permutation that can generate a tree isomorphic to Takahashi's favorite tree, print -1.
If it exists, print the lexicographically smallest such permutation, with spaces in between.

-----Sample Input-----
6
1 2
1 3
1 4
1 5
5 6

-----Sample Output-----
1 2 4 5 3 6

If the permutation (1, 2, 4, 5, 3, 6) is used to generate a tree, it looks as follows:

This is isomorphic to the given graph.

```python

USER_FILENAME = "<user_code>"
import sys, json, builtins
import math, heapq, bisect, itertools, functools, collections, statistics, fractions, decimal, operator, array, random, re, string, os, pathlib
try:
    import resource as _res
except Exception:
    _res = None
from collections import Counter, defaultdict, deque, OrderedDict
from functools import lru_cache, reduce
from itertools import accumulate, permutations, combinations, product
from math import gcd, ceil, floor, sqrt
from decimal import Decimal
try:
    from typing import *
except Exception:
    pass
try:
    sys.setrecursionlimit(1_000_000)
except Exception:
    pass
try:
    import site as _site
    try:
        _sys_sites = _site.getsitepackages() if hasattr(_site, "getsitepackages") else []
        for _p in _sys_sites:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
    try:
        _usp = _site.getusersitepackages()
        if isinstance(_usp, str):
            _usp = [_usp]
        for _p in _usp:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
except Exception:
    pass

ns = {"__name__": "__main__"}
for _k, _v in list(globals().items()):
    if not _k.startswith("_"):
        ns[_k] = _v
_CODE = 'import sys\nsys.setrecursionlimit(10**7)\ninput = sys.stdin.readline\n\nN = int(input())\nVW = [[int(x)-1 for x in input().split()] for _ in range(N-1)]\n\n"""\n直径に次数1の頂点が生えている\n"""\n\ngraph = [[] for _ in range(N)]\ndeg = [0] * N\nfor v,w in VW:\n    graph[v].append(w)\n    graph[w].append(v)\n    deg[v] += 1\n    deg[w] += 1\n\ndef dijkstra(start):\n    INF = 10**10\n    dist = [INF] * N\n    q = [(start,0)]\n    while q:\n        qq = []\n        for v,d in q:\n            dist[v] = d\n            for w in graph[v]:\n                if dist[w] == INF:\n                    qq.append((w,d+1))\n        q = qq\n    return dist\n\ndist = dijkstra(0)\nv = dist.index(max(dist))\ndist = dijkstra(v)\nw = dist.index(max(dist))\ndiag = v,w\n\ndef create_perm(start):\n    arr = []\n    v = start\n    parent = None\n    next_p = 1\n    while True:\n        n = 0\n        next_v = None\n        for w in graph[v]:\n            if w == parent:\n                continue\n            if next_v is None or deg[next_v] < deg[w]:\n                next_v = w\n            if deg[w] == 1:\n                n += 1\n        if next_v is None:\n            return arr + [next_p]\n        if deg[next_v] == 1:\n            n -= 1\n        arr += list(range(next_p+1,next_p+n+1))\n        arr.append(next_p)\n        next_p += n+1\n        parent = v\n        v = next_v\n\nP = create_perm(diag[1])\n\nQ = create_perm(diag[0])\n\nif len(P) != N:\n    answer = -1\nelse:\n    if P > Q:\n        P = Q\n    answer = \' \'.join(map(str,P))\nprint(answer)\n\n'
_co = compile(_CODE, USER_FILENAME, "exec")
exec(_co, ns, ns)

```

Measured memory_bytes: 13577