#include <bits/stdc++.h>
using namespace std;
string s, num = "";
stack<int> si;
stack<char> sc;
int a, b;
int js(int a, int b, char c)
{
switch (c)
{
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
case '^':
return round(pow(a, b)); // 四舍五入解决精度问题
}
return 0;
}
string yxj = "()+-*/^"; // 0123456 /2 0011223
int main()
{
cin >> s;
s += '-'; // 做最后一次运算的处理,实际不参与计算
for (int i = 0; s[i]; i++)
{
if (s[i] >= '0' && s[i] <= '9')
{
num += s[i];
}
else
{
if (num.size() != 0)
{
si.push(stoi(num));
num = "";
}
if (s[i] == '(')
sc.push(s[i]);
else if (s[i] == ')')
{
while (!sc.empty() && sc.top() != '(')
{
b = si.top();
si.pop();
a = si.top();
si.pop();
si.push(js(a, b, sc.top()));
sc.pop();
}
sc.pop(); // 多余做括号出栈
}
else
{
while (!sc.empty() && sc.top() != '(' && yxj.find(sc.top()) / 2 >= yxj.find(s[i]) / 2)
{
b = si.top();
si.pop();
a = si.top();
si.pop();
si.push(js(a, b, sc.top()));
sc.pop();
}
sc.push(s[i]);
}
}
}
cout << si.top();
return 0;
}