#include <iostream>
#include <queue>
using namespace std;
const int maxn = 11;
int a[maxn] = {0}, n, root, num = 0;
struct node{
int lchild = -1, rchild = -1;
}Node[maxn];
void levelorder(int root){
queue<int> q;
q.push(root);
while(!q.empty()){
int temp = q.front();
q.pop();
printf("%d", temp); num++;
if(num < n) printf(" ");
if(Node[temp].lchild != -1) q.push(Node[temp].lchild);
if(Node[temp].rchild != -1) q.push(Node[temp].rchild);
}
}
void inorder(int root){
if(root == -1) return;
inorder(Node[root].lchild);
printf("%d", root); num--;
if(num > 0) printf(" ");
inorder(Node[root].rchild);
}
int main(){
cin >> n;
for(int i = 0; i < n; i++){
char c1, c2;
cin >> c1 >> c2;
if(isdigit(c1)){
Node[i].rchild = c1 - '0'; a[c1 - '0'] = 1;
}
if(isdigit(c2)){
Node[i].lchild = c2 - '0'; a[c2 - '0'] = 1;
}
}
for(int i = 0; i < n; i++)
if(a[i] == 0) root = i;
levelorder(root); printf("\n");
inorder(root); printf("\n");
return 0;
}