/*
后缀表达式问题 运用了表达树 栈 和队列完成
*/
#include<cstdio>
#include<cstring>#include<stack>
#include<queue>
#include<ctype.h>
using namespace std;
char s[10110],a[10110];
typedef struct node Tnode;
struct node
{
char data;
Tnode *lchild;
Tnode *rchild;
};
void remove_tree(Tnode *u)
{
if (u == NULL)
return;
remove_tree(u->lchild);
remove_tree(u->rchild);
delete u;
}
Tnode *creat(char a, Tnode *l,Tnode *r)
{
Tnode *p = new Tnode;
p->data = a;
p->lchild = l;
p->rchild = r;
return p;
}
Tnode *creat(char a)
{
Tnode *p = new Tnode;
p->data = a;
p->lchild = NULL;
p->rchild = NULL;
return p;
}
int bfs(Tnode *root)
{
queue<Tnode *>Q;
Q.push(root);
Tnode *p;
int la = 0;
while(!Q.empty())
{
p = Q.front();
Q.pop();
if(p->data)
{
a[la++] = p->data;
//printf("%c..\n",a[la-1]);
if(p->lchild)
Q.push(p->lchild);
if(p->rchild)
Q.push(p->rchild);
}
}
for(int i = la-1; i >= 0; i--)
printf("%c",a[i]);
printf("\n");
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
stack<Tnode *> q;
int ls = strlen(s);
for(int i = 0; i < ls; i++)
{
if(islower(s[i]))
{
Tnode *c = creat(s[i]);
q.push(c);
}
else
{
Tnode *x,*y;
x = q.top();
q.pop();
y = q.top();
q.pop();
Tnode *op = creat(s[i],y,x);
q.push(op);
}
}
Tnode *root;
root = q.top();
bfs(root);
remove_tree(root);
}
return 0;
}