rt
code:
#include<bits/stdc++.h>
#define lot long long
using namespace std;
inline int read(){
int XX=0,FF=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
FF*=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
XX=XX*10+ch-48;
ch=getchar();
}
return XX*FF;
}
inline void write(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+'0');
}
string s,t;
int lent;
int right(char c){
if(c=='+'||c=='-')return 1;
else if(c=='*'||c=='/')return 2;
else if(c=='^')return 3;
else return 0;
}
void trans(string s){
s='('+s+')';
stack<char>q;
for(int i=0;i<s.length();i++){
if(s[i]=='(')q.push(s[i]);
else if(s[i]>='0'&&s[i]<='9'){
while(s[i]>='0'&&s[i]<='9')t=t+s[i++];
i--;
t+=" ";
}
else if(s[i]==')'){
while(!q.empty()&&q.top()!='('){
t=t+q.top()+" ";
q.pop();
}
q.pop();
}
else if(s[i]=='^'){
if(q.top()=='('||right(q.top())<right(s[i]))q.push(s[i]);
else while(q.top()!='('&&right(q.top())<=right(s[i])){
t=t+q.top()+" ";
q.pop();
}
}
else if(s[i]=='*'||s[i]=='/'||((s[i]=='+'||s[i]=='-')&&((s[i-1]>='0'&&s[i-1]<='9')||s[i-1]==')'))){
if(q.top()=='('||right(q.top())<right(s[i]))q.push(s[i]);
else while(q.top()!='('&&right(q.top())<right(s[i])){
t=t+q.top()+" ";
q.pop();
}
}
else t=t+s[i];
}
while(!q.empty())t=t+q.top(),q.pop();
return ;
}
lot qpow(lot a,lot b){
lot ans=1;
while(b>0){
if(b&1)ans=ans*a;
b>>=1;
a*=a;
}
return ans;
}
int main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin>>s;
trans(s);
cout<<t;puts("");
stack<int>q;
for(int i=0;i<t.length();i++){
if(((t[i]=='-'||t[i]=='+')&&t[i+1]>='0'&&t[i+1]<='9')||(t[i]>='0'&&t[i]<='9')){
bool f=(t[i]=='-'?1:0);
if(t[i]=='-'||t[i]=='+')i++;
int num=t[i++]-'0';
while(t[i]>='0'&&t[i]<='9')num=num*10+t[i]-'0',i++;
i--;
q.push((f?-num:num));
// cout<<num<<' ';
}
else if(t[i]!=' '){
int num1,num2;
num2=q.top();
q.pop();
num1=q.top();
q.pop();
// cout<<num1<<' '<<num2<<"\n";
switch(t[i]){
case'+':q.push(num1+num2);break;
case'-':q.push(num1-num2);break;
case'*':q.push(num1*num2);break;
case'/':q.push(num1/num2);break;
case'^':q.push(qpow(num1,num2));break;
}
}
}
write(q.top());
return 0;
}