#include<bits/stdc++.h>
using namespace std;
#define int long long
char s1[105],s2[105],s3[105];
char stuck1[105];
int num[105];
char flags[105];
int ans,p=0,cnt=0,cnt2=0,cnt3=0;
int cmp(char m){
switch(m){
case '+':
return 1;
case '-':
return 1;
case '*':
return 3;
case '/':
return 3;
case '^':
return 4;
default:
return 0;
}
}
void push(char *l,char n){
p++;
l[p]=n;
return;
}
char pop(char *l){
return l[p--];
}
bool empty(char *l){
if(p==0) return 1;
else return 0;
}
char query(char *l){
return l[p];
}
void add(char *l,char n){
l[cnt++]=n;
}
void append(char c){
if(c>='0'&&c<='9') add(s2,c);
else{
if(empty(stuck1)) push(stuck1,c);
else{
if(cmp(c)!=0&&cmp(c)>cmp(query(stuck1))){
push(stuck1,c);
}else if(c=='^'){
push(stuck1,c);
}else if(cmp(c)!=0&&cmp(c)<=cmp(query(stuck1))){
while(p-1>=0&&cmp(c)<=cmp(query(stuck1))){
add(s2,pop(stuck1));
}
push(stuck1,c);
}
}
}
}
int doit(int a,int b,char c){
switch(c){
case '+':
return a+b;
case '-':
return a-b;
case '*':
return a*b;
case '/':
return a/b;
case '^':
return (int)(pow(a,b));
}
}
void out(){
for(int i=0;i<strlen(s2);i++){
if(num[i]) printf("%d ",num[i]);
if(flags[i]) printf("%c ",flags[i]);
}
}
int search(int k){
for(int i=k;;i--){
if(num[i]!=0){
return i;
}else if(i<=0) return 0;
}
}
signed main(){
cin>>s1;
for(int i=0;i<strlen(s1);i++){
if(s1[i]=='('){
push(stuck1,s1[i]);
continue;
}else if(s1[i]==')'){
int cnt1=cnt;
cnt=0;
while(query(stuck1)!='(') add(s3,pop(stuck1));
pop(stuck1);
cnt=cnt1;
for(int j=0;j<strlen(s3);j++) add(s2,s3[j]);
continue;
}
append(s1[i]);
}
if(!empty(stuck1)){
for(int i=p;i>0;i--) add(s2,stuck1[i]);
}
for(int i=0;i<strlen(s2);i++){
printf("%c ",s2[i]);
}
cout<<endl;
for(int i=0;i<strlen(s2);i++){
if(s2[i]<'0'||s2[i]>'9'){
cnt3++;
flags[i]=s2[i];
}
else num[i]=(int)(s2[i]-'0');
}
int delta=0;
for(int i=0;i<=strlen(s2);i++){
if(flags[i]){
num[i]=doit(num[i-2],num[i-1],flags[i]);
num[i-2]=0;
num[i-1]=0;
flags[i]='\0';
int pos=search(i-1);
num[i-1]=num[pos];
num[pos]=0;
out();
delta+=2;
cout<<endl;
}
}
return 0;
}