#include <iostream>
#include <string>
#include <stack>
#include <vector>

using namespace std;

#ifdef FIRST_MRTHOD
 int i;
/*
思路:当输入字符为‘(’,则进行递归;如果输入字符为数字,将字符串数字转化为整型数字;
如果算数运算符为'+'',则将数字压入队列;
如果算数运算符为'-',则将(-)数字压入队列;
如果算数运算符为'*’,则将弹出栈顶字符与其相乘,将其结果压入栈;
如果算数运算符为'/’,则将弹出栈顶字符其相除,将其结果压入栈;
如果输入字符为‘)’,则进行下一轮运算
将栈的数据相加求和。
*/
int expressionValue(string &expressStr)
{
   
    int len = expressStr.length();
    char op = '+';
    int num = 0;
    stack<int> sta;
    while(i < len) {
        if (expressStr[i] == '(') {
            i++;
            num = expressionValue(expressStr);
        }
        while(i < len && expressStr[i] >= '0' && expressStr[i] <= '9') {
            num = num*10 + expressStr[i] - '0';
            i++;
        }
        switch(op) {
            case '+' :{
                 sta.push(num);
                 break;
            }
            case '-' : {
                 sta.push(-num);
                 break;
            }
            case '*' :{
                 int temp = sta.top();
                 sta.pop();
                 temp *= num;
                 sta.push(temp);
                 break;
            }
            case '/' :{
                 int temp = sta.top();
                 sta.pop();
                 temp /= num;
                 sta.push(temp);
                 break;
            }
        }
        num = 0; //情况数字
        op = expressStr[i];
        if(expressStr[i] == ')') {
            i++;
            break;
        }
        i++;
    }
    int sum = 0;
    while(sta.size()) {
        sum += sta.top();
        sta.pop();
    }
    return sum;
}
int main()
{
    string expressStr;
    while(cin>>expressStr) {
        i = 0;
        cout<<expressionValue(expressStr)<<endl;
    }
}
#else

/*
思路:从头开始变量,遇到字符串数字转化整型数字;若遇到‘(’开始遍历,若再次遇到‘(’层级累加,若遇到‘)’层级减少,知道层级为0;
若遇到运算符,则进行算数运算,得到结果进行下一轮运算。最后对整个数据进行相加求和
*/
int expressionValue(string expressStr, int l, int r)
{
    int num = 0;
    char op = '+';
    vector<int> vec;
    for(int i = l; i <= r; i++) {
        if(expressStr[i] >= '0' && expressStr[i] <= '9') {
            num = num * 10 + expressStr[i] - '0';
        }
        if (expressStr[i] == '(') {
            int layer = 0; //统计左括号层级
            int j = i;
            while(j <= r) {
                if (expressStr[j] == '(') {
                    layer++;
                } else if (expressStr[j] == ')') {
                    layer--;
                    if(layer == 0) {
                        break;
                    }
                }
                j++;
            }
            num = expressionValue(expressStr, i+1, j-1); // 递归括号的部分
            i = j + 1;
        }
        if (!isdigit(expressStr[i]) || i == r) {
            switch(op) {
                case '+' : {
                    vec.push_back(num);
                    break;
                } 
                case '-' : {
                    vec.push_back(-num);
                    break;
                } 
                case '*' : {
                    vec.back() *= num;
                    break;
                } 
                case '/' : {
                    vec.back() /= num;
                    break;
                } 
            }
             op = expressStr[i]; // 下一轮的运算符
             num = 0;// 清空
        }
        
       
    }
    int sum = 0;
    for(auto x : vec) {
        sum += x;
    }
    return sum;
}


int main()
{
    string expressStr;
    while(cin>>expressStr) {
        cout<<expressionValue(expressStr, 0, expressStr.length()-1)<<endl;
    }
}
#endif