#include<iostream>
#include<stack>
#include<cmath>
using namespace std;
void cal(stack<int>& num, stack<char>& sign){
int num1 = num.top();
num.pop();
int num2 = num.top();
num.pop();
char op = sign.top();
sign.pop();
if(op == '+')
num2 = num2 + num1;
else if(op == '-')
num2 = num2 - num1;
else if(op == '*')
num2 = num2 * num1;
else if(op == '/')
num2 = num2 / num1;
num.push(num2);
}
int main(){
string line;
cin >> line;
char op;
stack<char> sign;
stack<int> num;
// 在头尾添加括号不需要额外的末尾处理
sign.push('(');
line += ')';
for(int i = 0; i < line.size(); ++i){
if(line[i] >= '0' && line[i] <= '9'){
int count = 0;
while(isdigit(line[i + count]))
++count;
string temp = line.substr(i, count);
// 在数字前面有负号
if((1 > 1 || line[i - 1] == '-' && (line[i - 2] == '(' || line[i - 2] == '[' || line[i - 2] == '{') ) || (i == 1 && line[0] == '-')){
sign.pop(); // 将错误当作运算符的符号取出来
num.push(-stoi(temp));
}
else
num.push(stoi(temp));
i = i + count - 1;
}
else{
// 左括号直接入栈
if(line[i] == '(' || line[i] == '[' || line[i] == '{')
sign.push(line[i]);
// 遇到右括号,将括号中所有运算符出栈进行计算
else if(line[i] == ')'){
do{
op = sign.top();
if(op != '(')
cal(num, sign);
else
sign.pop(); // 去除左括号,不然留在栈中会造成程序错误
}while(op != '(');
}else if(line[i] == ']'){
do{
op = sign.top();
if(op != '[')
cal(num, sign);
else
sign.pop();
}while(op != '[');
}else if(line[i] == '}'){
do{
op = sign.top();
if(op != '{')
cal(num, sign);
else
sign.pop();
}while(op != '{');
}else if(line[i] == '+' || line[i] == '-'){ // 加减法优先级低,遇到加减法需要将前面所有的运算符弹出栈,括号除外
while(!sign.empty()){
op = sign.top();
if(op == '(' || op == '[' || op == '{')
break;
cal(num, sign);
}
sign.push(line[i]);
}else if(line[i] == '*' || line[i] == '/'){ // 乘除优先级高于加减,因此只用弹出乘除符号
while(!sign.empty()){
op = sign.top();
if(op == '(' || op == '[' || op == '{' || op == '+' || op == '-')
break;
cal(num, sign);
}
sign.push(line[i]);
}
}
}
cout << num.top();
return 0;
}