/*
将1 - 2 * 3 看作 “+1” + “-2 * 3”;
常规计算器:栈stack + 符号标志位sign;
栈每次记录符号位的前一个int值,与符号位配合即为真实值
乘除时,直接将栈内的top值乘或除当前值。
遇到‘(’、'{'、'['优先级符号,即递归。将括号里的运算递归计算并返回计算值
*/
#include <iostream>
#include <bits/stdc++.h>using namespace std;
int cal(string &s, int& start) {
stack<int> stk;
char sign = '+';
int num = 0;
for(; start < s.size(); start++) {
if(s[start] == '(' || s[start] == '{' || s[start] == '[') {
start++;
num = cal(s, start);
start++;
}
if(isdigit(s[start])) {
num = 10 * num + (s[start] - '0');
}
if((!isdigit(s[start]) && s[start] != ' ') || start == s.size() - 1) {
int pre;
switch (sign) {
case '+' :
stk.push(num);
break;
case '-' :
stk.push(-num);
break;
case '*' :
pre = stk.top();
stk.pop();
stk.push(pre * num);
break;
case '/' :
pre = stk.top();
stk.pop();
stk.push(pre / num);
break;
}
sign = s[start];
num = 0;
}
if(s[start] == ')' || s[start] == '}' || s[start] == ']')
break;
}
int res = 0;
while(!stk.empty()) {
res += stk.top();
stk.pop();
}
return res;
}
int main() {
string s;
getline(cin, s);
int start = 0;
cout << cal(s, start) << endl;
return 0;
}