#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;
}