import java.util.*;

// 参考:https://blog.nowcoder.net/n/b825074c53dc4d178e7f6bde8b8bbbf3
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    public int solve (String s) {
        // write code here
        return calc(s,0).get(0);
    }

    // 123*(456+789)*1
    ArrayList<Integer> calc(String s,int index){
        // 栈来存计算后的结果
        Stack<Integer> st = new Stack<Integer>();
        int num = 0;
        char op = '+';
        int i;
        for(i = index;i<s.length();i++){
            // 依次读取数字
            if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){
                num = num*10 + s.charAt(i) - '0';
                if(i != s.length()-1){
                    continue;
                }
            }

            // 处理括号
            if(s.charAt(i) == '('){
                // 递归处理括号内的内容
                ArrayList<Integer> res = calc(s,i+1);// 传入当前索引的下一个位置(即i+1)
                num = res.get(0);
                i = res.get(1);// 更新i的位置
                if(i != s.length()-1){
                    continue;
                }
            }

            // 处理操作符 + - *
            switch(op){
                case '+':
                    st.push(num);
                    break;
                case '-':
                    // 负数,取num的相反数
                    st.push(-num);
                    break;
                case '*':
                    int temp = st.pop();
                    st.push(temp * num);
                    break;
            }

            num = 0; // 重置
            // 递归的结束条件
            if(s.charAt(i) == ')'){
                break;
            }else{
                op = s.charAt(i);
            }
        }
        int sum = 0;
        // 栈中元素相加
        while(!st.isEmpty()){
            sum += st.pop();
        }
        ArrayList<Integer> temp = new ArrayList<>();
        temp.add(sum);
        temp.add(i);
        return temp;
    }
}