#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define siz(x) (int)(x.size())
#define all(x) x.begin(), x.end()
#define debug_arr(x,len) for(int _=1; _<=len; _++) cout<<x[_]<<" "; cout<<'\n';
#define debug(x) cout<<'\n'<<#x<<": "<<x<<'\n';
const int maxN = 2e5+5;
int n;
bool good[maxN], tru[maxN], cong[maxN];
string s;
vector<pair<int,int>>v;
void solve()
{
}
int32_t main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>s;
n = siz(s);
stack<int>st;
map<int, bool>minus, plus;
for(int i=0; i<n; i+=1)
{
if(s[i] == '(') st.push(i);
if(s[i] == ')')
{
// cout<<st.top()<<" "<<i<<" "<<'\n';
v.push_back({st.top(), i});
st.pop();
}
}
for(int i=0; i<n; i+=1)
{
if(s[i] == '-') minus[i] = 1;
if(s[i] == '+') plus[i] = 1;
}
for(int i=0; i<siz(v); i+=1)
{
vector<int>xoa_cong, xoa_tru;
auto it = minus.lower_bound(v[i].fi);
while(it != minus.end() && it->fi <= v[i].se)
{
tru[v[i].fi] = tru[v[i].se] = 1;
xoa_tru.push_back(it->fi);
it++;
}
it = plus.lower_bound(v[i].fi);
while(it != plus.end() && it->fi <= v[i].se)
{
cong[v[i].fi] = cong[v[i].se] = 1;
xoa_cong.push_back(it->fi);
it++;
}
for(auto j: xoa_tru) minus.erase(j);
for(auto j: xoa_cong) plus.erase(j);
}
for(int i=0; i<siz(v); i+=1)
{
if(!tru[v[i].fi]) continue;
bool checkl = 0, checkr = 0;
if(v[i].fi == 0) checkl = 1;
if(v[i].fi != 0 && s[v[i].fi-1] == '+') checkl = 1;
if(v[i].fi != 0 && s[v[i].fi-1] == '(') checkl = 1;
if(v[i].se == n-1) checkr = 1;
if(v[i].se != n-1 && s[v[i].se+1] == '+') checkr = 1;
if(v[i].se != n-1 && s[v[i].se+1] == '-') checkr = 1;
if(v[i].se != n-1 && s[v[i].se+1] == ')') checkr = 1;
if(checkl && checkr) good[v[i].fi] = good[v[i].se] = 1;
}
for(int i=0; i<siz(v); i+=1)
{
if(!cong[v[i].fi]) continue;
bool checkl = 0, checkr = 0;
if(v[i].fi == 0) checkl = 1;
if(v[i].fi != 0 && s[v[i].fi-1] == '+') checkl = 1;
if(v[i].fi != 0 && s[v[i].fi-1] == '(') checkl = 1;
if(v[i].se == n-1) checkr = 1;
if(v[i].se != n-1 && s[v[i].se+1] == '+') checkr = 1;
if(v[i].se != n-1 && s[v[i].se+1] == '-') checkr = 1;
if(v[i].se != n-1 && s[v[i].se+1] == ')') checkr = 1;
if(checkl && checkr) good[v[i].fi] = good[v[i].se] = 1;
}
for(int i=0; i<siz(v); i+=1)
{
if(cong[v[i].fi]) continue;
if(tru[v[i].fi]) continue;
good[v[i].fi] = good[v[i].se] = 1;
}
for(int i=0; i<n; i+=1)
{
if(good[i]) continue;
cout<<s[i];
}
}