struct OP
{
int pos;
char op;
};
char * Remove(char * str)
{
char * p = str;
int i = 0;
stack<OP> ops;
vector<int> rems;
while(*p!='\0')
{
OP op;
if(*p=='+'||*p=='-'||*p=='*'||*p=='/'||*p=='(')
{
op.op =*p;
op.pos = i;
ops.push(op);
}
else if(*p==')')
{
int next = 0;
int pre = 0;
int lower = 1;
char * t = p+1;
while(*t!='\0'&&*t==' ')
{
++t;
}
next = (*t=='*'||*t=='/');
while(ops.size()>0)
{
op = ops.top();
ops.pop();
if(op.op=='(')
{
break;
}
if(op.op=='+'||op.op=='-')
{
lower = 0;
}
}
t =&str[op.pos] -1;
while(t>=str&&*t==' ')
{
--t;
}
pre = (t>=str&&(*t=='*'||*t=='/'));
if(lower>=pre&&lower>=next)
{
rems.push_back(i);
rems.push_back(op.pos);
}
}
++i;
++p;
}
if(rems.size()==0)
{
return str;
}
sort(rems.begin(),rems.end());
int cur = rems[0];
int beg = rems[0] +1;
for(int i = 0;i<rems.size()-1;++i)
{
int end = rems[i+1];
while(beg<end)
{
str[cur]= str[beg];
++beg;
++cur;
}
beg = end +1;
}
while(str[cur]!='\0')
{
str[cur]= str[beg];
++cur;
++beg;
}
return str;
}
int main()
{
char str[256]= "(a+b+c+ (d+e) * 8- 5)";
while(cin>>str)
{
cout<<Remove(str)<<endl;
}
return 0;
}