#include<cstdio>
#include<algorithm>
#include<vector>
#include<string>
#include<iostream>
#define maxn 22
using namespace std;
struct node {
string data;
int left, right;
} n[maxn];
int parents[maxn];
int findroot(int temp) {
int t = temp;
while (parents[t] != -1) t = parents[t];
return t;
}
void print(int root) {
bool flag = false;
if (n[root].left != -1 || n[root].right != -1) flag = true;
if (flag) {
cout << '(';
}
if (n[root].left != -1) {
print(n[root].left);
}
cout << n[root].data;
if (n[root].right != -1) {
print(n[root].right);
}
if (flag) {
cout << ')';
}
return;
}
void print_root(int root) {
if (n[root].left != -1) print(n[root].left);
cout << n[root].data;
if (n[root].right != -1) print(n[root].right);
return;
}
int main() {
int N;
scanf("%d", &N);
for (int i = 1; i <= N; i++) {
parents[i] = -1;
}
for (int i = 1; i <= N; i++) {
cin >> n[i].data >> n[i].left >> n[i].right;
if (n[i].left != -1) parents[n[i].left] = i;
if (n[i].right != -1) parents[n[i].right] = i;
}
for (int i = 1; i <= N; i++) {
printf("%d ", parents[i]);
}
printf("\n");
int root = findroot(1);
print_root(root);
printf("\n");
}