#include<cstdio>
#include<vector>
#include<string>
using namespace std;
int n;
struct node{
char data[12];
int left, right;
}m[30];
bool have[30];
vector<string> res;
void DFS(int index)
{
if(index == -1)
return;
if(m[index].left != -1 || m[index].right != -1)
res.push_back("(");
DFS(m[index].left);
res.push_back(m[index].data);
DFS(m[index].right);
if(m[index].left != -1 || m[index].right != -1)
res.push_back(")");
}
int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
scanf("%s%d%d", m[i].data, &m[i].left, &m[i].right);
have[m[i].left]++;
have[m[i].right]++;
}
int root = 1;
for(int i = 1; i <= n; i++)
if(have[i] == 0)
{
root = i;
break;
}
DFS(root);
if(res[0] == "(")
for(int i = 1; i < res.size()-1; i++)
printf("%s", res[i].c_str());
else
for(int i = 0; i < res.size(); i++)
printf("%s", res[i].c_str());
}