#include<bits/stdc++.h>
using namespace std;
char cs[1001], s[1001], ch;
map<char, int> mp;
int x, top;
struct node{
//digit-false;
bool flag;
char c;
int num;
} q[100001];
int f = 1, t = 0;
int a[1001], Top;
int main(){
mp['+']=mp['-']=1;
mp['*']=mp['/']=2;
mp['^']=3;
cin.getline(cs, 1001);
int l = strlen(cs);
for(int i = 0; i < l; i++){
if(cs[i]<='9'&&cs[i]>='0') x=x*10+cs[i]-'0';
else{
if(cs[i]==')'){
q[++t].flag=0, q[t].num=x, x = 0;
while(top>0&&cs[i]==')'&&s[top]!='(') q[++t].flag=1, q[t].c=s[top--];
s[top] = cs[i];
continue;
}
if(cs[i]=='('){
s[++top]=cs[i];
continue;
}
if(s[top]==')') top--;
else q[++t].flag=0, q[t].num=x, x=0;
while(top>0&&s[top]!='('&&mp[s[top]]>=mp[cs[i]]) q[++t].flag=1, q[t].c=s[top--];
s[++top]=cs[i];
}
if(i==l-1) q[++t].flag=0, q[t].num=x, x = 0;
}
while(top>0) q[++t].flag=1, q[t].c=s[top--];
for(int i = f; i <= t; i++){
if(q[i].flag) printf("%c ", q[i].c);
else printf("%d ", q[i].num);
}
printf("\n");
int e = t;
while(f<t){
e=t;
while(q[f].flag==0) a[++Top] = q[f].num, q[++t].num=q[f++].num;
t-=2;
if(q[f].c=='+') q[++t].num=a[Top-1]+a[Top];
else if(q[f].c=='-') q[++t].num=a[Top-1]-a[Top];
else if(q[f].c=='*') q[++t].num=a[Top-1]*a[Top];
else if(q[f].c=='/') q[++t].num=a[Top-1]/a[Top];
else if(q[f].c=='^'){
q[++t].num=1;
for(int i = 1; i <= a[Top]; i++) q[t].num*=a[Top-1];
}
f++, Top=0;
while(f<=e)
q[++t].c=q[f].c, q[t].flag=q[f].flag, q[t].num=q[f++].num;
for(int i = f; i <= t; i++){
if(q[i].flag) printf("%c ", q[i].c);
else printf("%d ", q[i].num);
}
printf("\n");
}
return 0;
}
//53*4+2*(5+7)-3
//53 4 * 2 5 + 7 * + 3 -
//53*4+2*5+7-3
//53 4 * 2 5 * + 7 + 3 -
全部WA,但是样例和自己的数据都过了 不知道错在哪里