#include "iostream"
#include "string"
#include "stdio.h"
#include "ctype.h"
#include "algorithm"
#include "stack"
using namespace std;
int cacluExprePriority(string str,bool &hasC)
{
int left=0;
int right=0;
bool bfind=false;
for(int i=0;i<str.size();i++)
{
if(str[i]=='(')
left++;
if(str[i]==')')
right++;
if(str[i]=='/')
hasC=true;
if(str[i]=='*'||str[i]=='/')
{
if(left==right)
return 2;
}
if(str[i]=='+'||str[i]=='-')
{
bfind=true;
}
}
return bfind?1:-1;
}
bool vis[1000];
int safe(int i,int n)
{
if(i<0)
return 0;
if(i>=n)
return n-1;
return i;
}
void findIndexOfBrackets(string str)
{
stack<int>q;
for(int i=0;i<str.size();i++)
{
if(str[i]=='(')
{
q.push(i);
}
if(str[i]==')')
{
int s=q.top();
int t=i;
bool hasC=false;
int priority=cacluExprePriority(str.substr(s+1,t-s-1),hasC);
q.pop();
bool temp=false;
if(s-1>=0&&cacluExprePriority(str.substr(safe(s-1,str.size()),1),temp)>=cacluExprePriority(str.substr(safe(t+1,str.size()),1),temp))
{
char op=str[s-1];
{
if(op=='+')
{
vis[s]=vis[t]=true;
}
if(op=='-')
{
if(priority==2)
vis[s]=vis[t]=true;
}
if(op=='*')
{
if(priority==2&&hasC==false)
vis[s]=vis[t]=true;
}
}
}
else if(t+1<str.size())
{
char op=str[t+1];
if(op=='+'||op=='-')
{
vis[s]=vis[t]=true;
}
if(op=='*'||op=='/')
{
if(priority==2)
vis[s]=vis[t]=true;
}
}
}
}
}
int main()
{
string exper;
cin>>exper;
findIndexOfBrackets(exper);
for(int i=0;i<exper.size();i++)
if(vis[i]==false)
cout<<exper[i];
cout<<endl;
return 0;
}
/**************************************************************
Problem: 1855
User: admin
Language: C++
Result: Accepted
Time:39 ms
Memory:2080 kb
****************************************************************/