#include <iostream>
#include <stack>
#include <sstream>
using namespace std;
void calculate(string s);
int prio(char op);
bool trans(string &str, string & str1);
void s2i(string str, int &num);
//返回符号优先级
int prio(char op){
int prio;
if(op == '*' || op == '/'){
prio = 2;
}
if(op == '+' || op == '-'){
prio = 1;
}
if(op == '('){
prio = 0;
}
return prio;
}
bool trans(string &str, string & str1){
stack<char> s;
int i = 0;
for(i = 0; i < str.size(); i++){
if(str[i] >= '0' && str[i] <= '9'){ //是数字直接写到式子上
str1 += str[i];
}else{
if(s.empty()){ //栈内空,直接进栈
s.push(str[i]);
} else if(str[i] == '('){ //左括号可直接进栈
s.push(str[i]);
} else if(str[i] == ')'){ //右括号,弹出栈内元素,直到(
while(s.top() != '('){
str1 += s.top();
s.pop();
}
s.pop();
} else {
while(prio(str[i]) <= prio(s.top())){ //符号优先级小于栈内符号优先级
str1 += s.top(); //栈内符号出栈
s.pop();
if(s.empty()){
break;
}
}
s.push(str[i]);
}
}
}
while(!s.empty()){ //最后栈内不是空的,弹出栈内所有符号
str1+= s.top();
s.pop();
}
return true;
}
//字符转int
void s2i(string str, int &num){
stringstream ss;
ss << str;
ss >> num;
}
//后缀表达式计算
void calculate(string s){
stack<char> ops;
stack<int> vals;
int left, right;
for(int i = 0; i < s.length(); i++){
if(s[i] >= '0' && s[i] <= '9'){ //数字,入数字栈
string s2 = "";
while(s[i] >= '0' && s[i] <= '9'){
s2 += s[i];
i++;
}
int num;
s2i(s2, num);
vals.push(num);
}else if(s[i] != ' '){ //非字符
if(!vals.empty()){
right = vals.top(); //取右运算数
vals.pop();
}
if(!vals.empty()){
left = vals.top(); //取左运算数
vals.pop();
}
switch(s[i]){
case '+':
vals.push(left + right);
break;
case '-':
vals.push(left - right);
break;
case '*':
vals.push(left * right);
break;
case '/':
vals.push(left / right);
break;
default:
break;
}
}
}
cout << vals.top() << endl;
}
int main(int argc, char** argv) {
string infix, postfix;
cin >> infix;
trans(infix, postfix);
calculate(postfix);
return 0;
}