import sys
class TreeNode:
def __init__(self, x):
self.id = x
self.l_child = None
self.r_child = None
def preorder(root, res):
if root is None:
return
res.append(root.id)
preorder(root.l_child, res)
preorder(root.r_child, res)
def inorder(root, res):
if root is None:
return
inorder(root.l_child, res)
res.append(root.id)
inorder(root.r_child, res)
def postorder(root, res):
if root is None:
return
postorder(root.l_child, res)
postorder(root.r_child, res)
res.append(root.id)
n = int(sys.stdin.readline())
nodes = [TreeNode(i) for i in range(n+1)] # 1-based indexing
# 记录每个节点的子节点列表
children_dict = [[] for _ in range(n+1)]
# 记录哪些节点被指向了,有助于找到根节点
has_father = [False] * (n+1)
for _ in range(n-1):
a, b = map(int, sys.stdin.readline().split())
children_dict[a].append(b)
has_father[b] = True
# 找根节点,根节点没父亲
root_id = 0
for i in range(1, n+1):
if not has_father[i]:
root_id = i
break
# 根据规则给每个节点设置左右孩子
for i in range(1, n+1):
kids = children_dict[i]
if len(kids) == 2:
left = min(kids)
right = max(kids)
nodes[i].l_child = nodes[left]
nodes[i].r_child = nodes[right]
elif len(kids) == 1:
c = kids[0]
# 规则:如果孩子编号 > 父编号,则是左孩子,否则右孩子
if c > i:
nodes[i].l_child = nodes[c]
else:
nodes[i].r_child = nodes[c]
# 遍历输出
pre_res, in_res, post_res = [], [], []
preorder(nodes[root_id], pre_res)
inorder(nodes[root_id], in_res)
postorder(nodes[root_id], post_res)
print(' '.join(map(str, pre_res)))
print(' '.join(map(str, in_res)))
print(' '.join(map(str, post_res)))