#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i, n) for(int i=0; i<(n); i++) #define FOR(i, m, n) for(int i=(m);i<(n);i++) #define sz(x) ((int)(x).size()) #define all(x) (x).begin(),(x).end() #define SORT(x) sort((x).begin(),(x).end()) #define REVE(x) reverse((x).begin(),(x).end()) #define mp make_pair #define pb push_back typedef vector VI; typedef vector VS; typedef vector> VVI; typedef pair PII; typedef long long LL; int calc(string s) { VI num; string op; int i = 0; while (i < sz(s)) { if (isdigit(s[i])) { int x = 0; while (i < sz(s) && isdigit(s[i])) { x = x * 10 + (s[i] - '0'); i++; } num.pb(x); } else if (s[i] == '.') { i += 2; int x = 0; while (i < sz(s) && isdigit(s[i])) { x = x * 10 + (s[i] - '0'); i++; } num.pb(x*-1); } else { op += s[i]; i++; } } //cout << "num:"; for (auto a : num)cout << a << " "; puts(""); int re = num[0]; rep(i, sz(op)) { if (op[i] == '+')re += num[i + 1]; else if (op[i] == '-')re -= num[i + 1]; } return re; } int main() { string s; cin >> s; VI k1, k2; rep(i, sz(s)) { if (s[i] == '(')k1.pb(i); else if (s[i] == ')')k2.pb(i); } VS num; rep(i, sz(k1)) { string sub = s.substr(k1[i] + 1, k2[i] - k1[i] - 1); string NUM = to_string(calc(sub)); //cout << sub << " -> " << NUM << endl; if (calc(sub) < 0) { string Num = "."; Num += NUM; num.pb(Num); } else { num.pb(NUM); } } string ans; int ni = 0; rep(i, sz(s)) { if (s[i] == '(') { while (i < sz(s)) { if (s[i] == ')')break; i++; } ans += num[ni]; ni++; } else { ans += s[i]; } } cout << calc(ans) << endl; }