#include<stdio.h>
#include<stdlib.h>
#define maxsize 10
typedef char Elemtype;
typedef struct sqstack
{
Elemtype p[maxsize];
int top;
}Sqstack;
void Initstack(Sqstack*&S)
{
S=(Sqstack*)malloc(sizeof(Sqstack));
S->top=-1;
}
void Push(Sqstack *&S,Elemtype e)
{
S->p[S->top]=e;
S->top++;
}
void Pop(Sqstack *&S,Elemtype &e)
{
S->p[S->top]=e;
S->top--;
}
void gettop(Sqstack S,Elemtype &r)
{
r=S->p[S->top];
}
bool stackEmtype(Sqstack S)
{
if(S->top==-1)
return true;
else
return false;
}
void trans(Elemtype exp,Elemtype postexp[20])
{
char e;
Sqstack Optr;
Initstack(Optr);
int i=0;
while(exp!='\0')
{
switch(exp)
{
case '(':
Push(Optr,'(');
exp++;
break;
case '+':
while(!stackEmtype(Optr))
{
gettop(Optr,e);
if(e!='(')
{
postexp[i++]=e;
Pop(Optr,e);
}
else
break;
}
Push(Optr,'+');
exp++;
break;
case '-':
while(!stackEmtype(Optr))
{
gettop(Optr,e);
if(e!='(')
{
postexp[i++]='e';
Pop(Optr,e);
}
else
break;
}
Push(Optr,'-');
exp++;
break;
case '':
while(!stackEmtype(Optr))
{
gettop(Optr,e);
if(e==''||e=='/')
{
postexp[i++]=e;
Pop(Optr,e);
}
else
break;
}
Push(Optr,'');
exp++;
break;
case '/':
while(!stackEmtype(Optr))
{
gettop(Optr,e);
if(e==''||e=='/')
{
postexp[i++]=e;
Pop(Optr,e);
}
else
break;
}
Push(Optr,'/');
exp++;
break;
default:
while(*exp>='0'&&*exp<='9')
{
postexp[i++]=*exp;
exp++;
}
postexp[i++]='#';
}
}
while(!stackEmtype(Optr))
{
gettop(Optr,e);
postexp[i++]=e;
Pop(Optr,e);
}
postexp[i]='\0';
}
int main()
{
Elemtype postexp[20];
int i=0;
char str[10];
scanf("%s",str);
trans(str,postexp);
printf("%s ",postexp);
}