/**************************************************************** 
 * Description: 输出算术式结果 例如：(12+2)/(13-2*3)
 * Author: Alex Li
 * Date: 2023-09-30 16:06:10
 * LastEditTime: 2024-08-17 22:38:57
****************************************************************/
#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;

stack<int> num; // 存储操作数的栈
stack<char> op; // 存储操作符的栈

// 使用一个数组的pair存储操作符及其优先级
pair<char, int> precedenceTable[] = {
        {'+', 1}, // 加法优先级为1
        {'-', 1}, // 减法优先级为1
        {'*', 2}, // 乘法优先级为2
        {'/', 2}  // 除法优先级为2
    };
// eval函数用于执行一次运算
void eval() {
    // 从数字栈中取出两个操作数
    int b = num.top(); num.pop(); // 获取栈顶元素并出栈（右操作数）
    int a = num.top(); num.pop(); // 获取栈顶元素并出栈（左操作数）
    
    // 从操作符栈中取出一个操作符
    char c = op.top(); op.pop();  // 获取栈顶操作符并出栈
    
    int result;
    // 根据操作符执行相应的运算
    if (c == '+') result = a + b;
    else if (c == '-') result = a - b;
    else if (c == '*') result = a * b;
    else if (c == '/') result = a / b;
    
    // 将运算结果压入数字栈
    num.push(result);
}

// precedence函数返回操作符的优先级
int precedence(char c) {
    
   
    
    // 遍历数组找到对应操作符的优先级
    for (auto& p : precedenceTable) {
        if (p.first == c) return p.second; // 返回匹配操作符的优先级
    }
    return -1; // 理论上不应该到达这里，返回-1表示未找到
}

int main() {
    string str;
    cin >> str; // 从标准输入读取算术表达式
    
    for (int i = 0; i < str.size(); i++) {
        char c = str[i];
        
        // 如果当前字符是数字
        if (isdigit(c)) { 
            int x = 0, j = i;
            // 处理可能的多位数字
            while (j < str.size() && isdigit(str[j])) {
                x = x * 10 + str[j++] - '0'; // 将字符转换为数字
            }
            i = j - 1; // 更新i以跳过处理过的数字
            num.push(x); // 将数字压入数字栈
        }
        // 如果当前字符是左括号 '('
        else if (c == '(') {
            op.push(c); // 左括号直接压入操作符栈
        }
        // 如果当前字符是右括号 ')'
        else if (c == ')') {
            // 处理括号内的表达式，直到遇到左括号
            while (op.top() != '(') eval();
            op.pop(); // 弹出左括号 '('
        }
        // 如果当前字符是操作符 '+', '-', '*', '/'
        else {
            // 处理优先级问题
            while (!op.empty() && op.top() != '(' && precedence(op.top()) >= precedence(c)) {
                eval(); // 如果栈顶操作符优先级大于等于当前操作符，执行运算
            }
            op.push(c); // 将当前操作符压入操作符栈
        }
    }

    // 如果表达式处理完毕，但操作符栈中仍有操作符，继续执行运算
    while (!op.empty()) eval();
    
    // 最终结果保存在数字栈的栈顶
    cout << num.top() << endl; // 输出最终结果
    return 0;
}
