#include<iostream>
#include<stack>
#include<queue>
using namespace std;
struct tree {
char letter;
tree* lp;
tree* rp;
};
int main(void)
{
int n;
cin >> n;//结点数
queue<char> que;
queue<tree*>que2;
tree* root = new tree;//根节点
root->lp = NULL;
root->rp = NULL;
tree* p = root;
cin >> p->letter;
que.push(p->letter);
que2.push(p);
int flag = 0;
while (!que.empty()) {
if(flag)//第一次就不多输入了
cin >> p->letter;
if (p->letter == que.front())
que.pop();//第一次一定会消除
p->lp = new tree;
cin >> p->lp->letter;
if (p->lp->letter != '*') {
que.push(p->lp->letter);
que2.push(p->lp);
}
p->rp = new tree;
cin >> p->rp->letter;
if (p->rp->letter != '*') {
que.push(p->rp->letter);
que2.push(p->rp);
}
flag=1;
que2.pop();//处理指针
if(!que2.empty())
p = que2.front();
}
//完成输入
p = root;
stack<tree*> stk1;//控制前序遍历
stk1.push(p);
while (!stk1.empty()) {
tree* q=p;
cout << q->letter;
if (q->rp->letter != '*')
stk1.push(q->rp);
if (q->lp->letter != '*')
q = q->lp;
else{
q = stk1.top();
stk1.pop();
}
p = q;
}
return 0;
}