#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 返回表达式的值
# @param s string字符串 待计算的表达式
# @return int整型
#
class Solution:
def solve(self , s: str) -> int:
# write code here
# 实施运算的操作函数
def apply_op(a,b,op):
if op == "+":return a+b
if op == "-":return a-b
if op == "*":return a*b
# 运算符优先级赋值
def procal(op):
if op in ("+","-"):return 1
if op == "*": return 2
return 0
# 设置两个栈,分别为数值栈和运算符栈
num_stack = []
op_stack = []
# 用于累积总处理的字符数值,包括数字和运算符
i = 0
while i < len(s):
# 判断该字符是否为数字
if s[i].isdigit():
num = 0
# 对于数字超过1位数的计算数进行累加起来,整合成真正需要计算的数
while i < len(s) and s[i].isdigit():
num = num *10 + int(s[i])
i += 1
# 将需要计算的数字添加到数值栈
num_stack.append(num)
# 对于优先级最高的括号,进行匹配和优先运算
elif s[i] == "(":
op_stack.append(s[i])
i += 1
elif s[i] == ")":
while op_stack[-1] != "(":
num1 = int(num_stack.pop())
num2 = num_stack.pop()
op = op_stack.pop()
num_stack.append(apply_op(num2,num1,op))
op_stack.pop()
i += 1
# 按照优先级,优先级更高的先进行运算
elif s[i] in ("+","-","*"):
while (op_stack and procal(op_stack[-1])>=procal(s[i])):
num1 = num_stack.pop()
num2 = num_stack.pop()
op = op_stack.pop()
num_stack.append(apply_op(num2,num1,op))
op_stack.append(s[i])
i += 1
# 不属于上述的情况,就字符会被压入
else:
i += 1
# 最后把字符串s都遍历完了,最后还没有进行运算的,循环进行运算,最后结果放在数字栈内
while op_stack:
num1 = num_stack.pop()
num2 = num_stack.pop()
op = op_stack.pop()
num_stack.append(apply_op(num2,num1,op))
results = int(num_stack[0])
return results
if __name__ == "__main__":
s = str(input().strip().replace('"',''))
print(Solution().solve(s))