//
// main.cpp
// PATA1130
//
// Created by Phoenix on 2018/2/25.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
int n, flag[22] = {0};
struct Node {
char str[13];
int lchild, rchild;
}node[22];
int k;
void inorder(int root) {
if(root == -1) return;
if(root != k && (node[root].lchild > 0 || node[root].rchild > 0)) {
printf("(");
}
inorder(node[root].lchild);
printf("%s", node[root].str);
inorder(node[root].rchild);
if(root != k && (node[root].lchild > 0 || node[root].rchild > 0)) {
printf(")");
}
}
int main(int argc, const char * argv[]) {
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%s %d %d", node[i].str, &node[i].lchild, &node[i].rchild);
if(node[i].lchild > 0) flag[node[i].lchild] = 1;
if(node[i].rchild > 0) flag[node[i].rchild] = 1;
}
for(int i = 1; i <= n; i++) {
if(flag[i] == 0) k = i;
}
inorder(k);
return 0;
}