#include<iostream>
#include<string>
#include<stack>
#include<cmath>
#include<sstream>
#include<algorithm>
using namespace std;
string back;
string caluse="";
int transfer(char s){
if(s=='+')return 1;
if(s=='-')return 1;
if(s=='*')return 2;
if(s=='/')return 2;
if(s=='^')return 3;
else return -1;
}
string int_to_str(long long num){
string yy;
while(num>0){
yy+=(num%10+'0');
num/=10;
}
reverse(yy.begin(),yy.end());
return yy;
}
void change(string str){
stack<char> s;
long long i=0;
while(i<str.size()){
if(str[i]=='('){
s.push(str[i]);
i++;
}
else if(str[i]==')'){
while(!s.empty() and s.top()!='('){
back+=s.top();
back+=" ";
s.pop();
}
s.pop();
i++;
}
else if(str[i]>='0' and str[i]<='9'){
back+=str[i];
back+=" ";
i++;
}
else{
while(!s.empty() and transfer(s.top())>=transfer(str[i])){
back+=s.top();
back+=" ";
s.pop();
}
s.push(str[i]);
i++;
}
}
while(!s.empty()){
back+=s.top();
s.pop();
}
}
char to_str(long long num){
return num+'0';
}
void print(long long i1,long long i2,char fuhao){
int i=0;
long long temp;
string p2="";
for(int i=0;i<caluse.size();i++){
p2+=caluse[i];
}
while(i<p2.size()){
char c=p2[i];
if(c>='0' and c<='9'){
int add=0,starti=i;
int temp=p2[i]-'0';
i++;
add++;
while(i<caluse.length() and caluse[i]>='0' and caluse[i]<='9'){
temp=temp*10+(p2[i]-'0');
i++;add++;
}
i++;add++;
int temp2=p2[i]-'0';
i++;add++;
while(i<caluse.length() and caluse[i]>='0' and caluse[i]<='9'){
temp2=temp2*10+(p2[i]-'0');
i++;add++;
}
if(temp==i1 and temp2==i2 and p2[i+1]==fuhao){
caluse.erase(i+1,2);
if(fuhao=='+'){caluse.insert(i,int_to_str(i1+i2)+"");}
if(fuhao=='-'){caluse.insert(i,int_to_str(i1-i2)+"");}
if(fuhao=='*'){caluse.insert(i,int_to_str(i1*i2)+"");}
if(fuhao=='/'){caluse.insert(i,int_to_str(i1/i2)+"");}
if(fuhao=='^'){caluse.insert(i,int_to_str(pow(i1,i2))+"");}
caluse.erase(i-add,i-starti);
}
else{
i-=add;
}
}
i++;
}
cout<<caluse<<endl;
}
int main(){
string s1;
cin>>s1;
change(s1);
stack<long long> s;
long long num=0;
long long i=0;
cout<<back<<endl;
for(int i=0;i<back.size();i++){
caluse+=back[i];
}
i=0;
while(i<back.size()){
char c=back[i];
if(c>='0' and c<='9'){
num=num*10+(c-'0');
}
else if(c=='+'){
long long i1=s.top();
s.pop();
long long i2=s.top();
s.pop();
s.push(i2+i1);
print(i1,i2,c);
// cout<<caluse<<endl;
}
else if(c=='-'){
long long i1=s.top();
s.pop();
long long i2=s.top();
s.pop();
s.push(i2-i1);
print(i1,i2,c);
// cout<<caluse<<endl;
}
else if(c=='*'){
long long i1=s.top();
s.pop();
long long i2=s.top();
s.pop();
s.push(i2*i1);
print(i1,i2,c);
// cout<<caluse<<endl;
}
else if(c=='/'){
long long i1=s.top();
s.pop();
long long i2=s.top();
s.pop();
s.push(i2/i1);
print(i1,i2,c);
// cout<<caluse<<endl;
}
else if(c=='^'){
long long i1=s.top();
s.pop();
long long i2=s.top();
s.pop();
s.push(pow(i2,i1));
print(i1,i2,c);
// cout<<caluse<<endl;
}
else if(c==' ' and num!=0){
s.push(num);
num=0;
}
i++;
}
cout<<s.top()<<endl;
}