#include <cstdio>
#include <queue>
#include <iostream>
using namespace std;
struct treenode
{
int lchild;
int rchild;
char val;
treenode()
{
lchild = rchild = -1;
}
treenode(char x)
{
val = x;
lchild = rchild = -1;
}
};
void leverorder(int root, treenode a[200])
{
if ((a[root].lchild==-1)&&(a[root].rchild==-1))
return;
else
{
queue<treenode> q;
q.push(a[root]);
while (!q.empty())
{
cout << a[root].val << endl;
q.pop();
if (a[root].lchild != 0)
q.push(a[a[root].lchild]);
if (a[root].rchild != 0)
q.push(a[a[root].rchild]);
}
}
}
treenode a[200];
int indepth[200] = {0};
int main()
{
int n;
scanf("%d", &n);
int l, r;
char val;
for (int i = 1; i <= n; i++)
{
getchar();
scanf("%c %d %d", &val, &l, &r);
a[i].lchild = l;
if (l != -1)
indepth[l]++;
a[i].rchild = r;
if (r != -1)
indepth[r]++;
a[i].val = val;
}
int root = -1;
for (int i = 1; i <= n; i++)
{
if (!indepth[i])
{
root = i;
break;
}
}
leverorder(root, a);
}
#include <cstdio>
#include <vector>
using namespace std;
struct treenode
{
int parent;
char val;
vector<int>child;
treenode()
{
parent = -1;
}
treenode(char x)
{
val = x;
parent = -1;
}
};
treenode a[200];
int main()
{
int n;
scanf("%d", &n);
int parent;
char val;
for (int i = 1; i <= n; i++)
{
scanf("%d", &parent);
getchar();
scanf("%c", &val);
a[parent].child.push_back(i);
a[i].val=val;
}
for (int i = 1; i <= n; i++)
{
for(int j=0;j<a[i].child.size();j++)
{
printf("%c ",a[a[i].child[j]].val);
}
printf("\n");
}
}