#include<iostream>
#include<string>
#include<map>
#include<stack>
#include<vector>
using namespace std;
bool getFirst(char a,char b){
map<char,int> opr;
opr.insert(map<char,int>::value_type('+',1));
opr.insert(map<char,int>::value_type('-',1));
opr.insert(map<char,int>::value_type('*',2));
opr.insert(map<char,int>::value_type('/',2));
opr.insert(map<char,int>::value_type('(',3));
opr.insert(map<char,int>::value_type(')',3));
if(opr[a] >= opr[b])
return true;
else
return false;
}
vector<char> reversePoland(string str){
stack<char> opr;
vector<char> output;
for(int i=0;i<str.length();i++){
if(str[i]>='a' && str[i]<='z'){
output.push_back(str[i]);
}
else{
if(opr.empty())
opr.push(str[i]);
else if(str[i] == ')'){
while(opr.top() != '('){
output.push_back(opr.top());
opr.pop();
}
opr.pop();
}
else if(getFirst(opr.top(),str[i]) == true){
while(!opr.empty() && getFirst(opr.top(),str[i]) == true && opr.top() != '('){
output.push_back(opr.top());
opr.pop();
}
opr.push(str[i]);
}
else{
opr.push(str[i]);
}
}
}
while(!opr.empty()){
output.push_back(opr.top());
opr.pop();
}
return output;
}
int main(){
string str;
cin >> str;
vector<char> res = reversePoland(str);
for(int i=0;i<res.size();i++)
cout<<res[i];
system("pause");
return 0;
}