#include<bits/stdc++.h>
using namespace std;
// ofstream __f("E:/123.txt");
// #define cout __f
//括号判断准则
// 括号前边为 “ - ”,且括号中为 “ + ” 或 “ - ”,不能删除;
// 括号前边为 “ / ”,不能删除;
// 括号后为 “ * ”,且括号中为 “ + ” 或 “ - ”,不能删除;
// 有以下几种情况是可以删除:
// 括号前和后为 “ + ” 或 “ - ”,括号中为 “ + ” 或 “ - ” 或 “ * ” 或 “ / ”,可以删除,但是注意:若括号前为 “ - ”,括号中为 “ + ” 或 “ - ”,在前边已经处理了,所以可以排除这种情况;
// 括号前为 “ * ”,括号中为 “ * ” 或 “ / ”,括号后为 “ + ” 或 “ - ” 或 “ * ” 或 “ / ”,可以删除;
// 其他情况不能删除
//去括号必须先去里面的再去外面的,递归处理
char s[300];
int n;
bool judge(int l,int r){
int i,s1=0,s2=0;
if(l>=1){
if(s[l-1]=='/') return false;
//判断+-,不算在子括号内的+-
for(int i=l+1;i<=r;i++){
if(s[i]=='(') break;
if(s[i]=='+'||s[i]=='-') s1++;
if(s[i]=='*'||s[i]=='/') s2++;
}
for(int i=r-1;i>=l;i--){
if(s[i]==')') break;
if(s[i]=='+'||s[i]=='-') s1++;
if(s[i]=='*'||s[i]=='/') s2++;
}
if(s1!=0&&s[l-1]=='-') return false;
if(s1!=0&&r<=n-2&&(s[r+1]=='*'||s[r+1]=='/')) return false;
}
if(l>=1&&(s[l-1]=='+'||s[l-1]=='-')) return true;
if(r<=n-2&&(s[r+1]=='+'||s[r+1]=='-')) return true;
if(l==0&&r==n-1) return true;
if(r<=n-2&&(s[r+1]=='+'||s[r+1]=='-'||s[r+1]=='*'||s[r+1]=='/')){
if(s1==0&&s2!=0) if(l>=1&&s[l-1]=='*') return true;
}
return false;
}
void f(int l,int r){
int k1=-1,k2=-1,f1,f2;
for(int i=l;i<=r;i++) if(s[i]=='('){
k1=i;
break;
}
if(k1==-1) return;//没括号
f1=f2=0;
f1++;
for(int i=k1+1;i<=r;i++){
if(s[i]=='('){
f1++;
// f(i,r);//递归先处理子括号,但是这样很慢
}
if(s[i]==')') f2++;
if(f1==f2){
if(judge(k1,i)){
//可以删除
s[i]=s[k1]=' ';
}
f(k1+1,i-1);//一样
if(i+1<n&&i+1<=r)//有右边
f(i+1,r);//对后面进行处理
break;
}
}
}
int main() {
cin>>s;
n=strlen(s);
f(0,n-1);
for(int i=0;i<n;i++) if(s[i]!=' ') cout<<s[i];
cout<<endl;
return 0;
}