import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    public int solve (String s) {
        // write code here
        ArrayList<Integer> result = cal(s,0);
        return result.get(0);
    }
    
    public ArrayList<Integer> cal(String s, int start){
        char cur;
        int num = 0;
        char opt = '+';
        ArrayList<Integer> result = new ArrayList<>();
        LinkedList<Integer> stack = new LinkedList<>();
        int i;
        for(i = start; i < s.length(); i++){
            cur = s.charAt(i);
            //若是左括号就开始递归
            //若是右括号就结束递归
            //若是数字就加载连续的所有数字
            //若是符号就设为opt
            if(cur == '('){
                result = cal(s,i+1);
                num = result.get(0);
                i = result.get(1);
                if(i!=s.length()-1){
                    continue;
                }
            }

            if(cur>='0' && cur<='9'){
                num = num*10 + (cur-'0');
                if(i!=s.length()-1){
                    continue;
                }
            }
            switch(opt){
                case '+':
                    stack.push(num);
                    break;
                case '-':
                    stack.push(-num);
                    break;
                case '*':
                    int temp = stack.pop();
                    stack.push(num*temp);
                    break;
            }
            num=0;
            if(cur == ')'){
                break;
            } else{
                opt = cur;
            }

        }
        int sum = 0;
        while(!stack.isEmpty()){
            sum += stack.pop();
        }
        result.clear();
        result.add(sum);
        result.add(i);
        return result;
    }
}