#include 
<iostream>
#include 
<cstdio>
#include 
<cstring>
using namespace std;
#define Max_Stack_Size 1000
const char IsFirst[7][7= {
    {
'>''>''<''<''<''>''>'},
    {
'>''>''<''<''<''>''>'},
    {
'>''>''>''>''<''>''>'},
    {
'>''>''>''>''<''>''>'},
    {
'<''<''<''<''<''=''='},
    {
'>''>''>''>''>''>''>'},
    {
'<''<''<''<''<''<''='}
} ;
struct StackT1{
    
char Stack[Max_Stack_Size];
    
int  Top;
    
void ClearStack(){ Top = 1; }
    
char GetTop(){ return Stack[Top - 1]; }
    
void Push(char c){ Stack[Top++= c; }
    
void Pop(char &c){ c = Stack[--Top]; }
} OPTR; 
// 运算符栈
struct StackT2{
    
int  Stack[Max_Stack_Size];
    
int  Top;
    
void ClearStack(){ Top = 1; }
    
int  GetTop(){ return Stack[Top - 1]; }
    
void Push(int c){ Stack[Top++= c; }
    
void Pop(int &c){ c = Stack[--Top]; }
} OPND; 
//操作数栈
bool IsNum(char c){
    
//cout << c << endl;
    return (c >= '0' && c <= '9');
}
int Operate(int a, char OP, int b){
    
int c;
    
//cout << a << OP << b << endl;
    switch (OP) {
        
case '+': c = a + b; break;
        
case '-': c = a - b; break;
        
case '*': c = a * b; break;
        
case '/': c = a / b; break;
    }
    
return c;
}
int Change(char c){
    
int ret;
    
switch (c) {
        
case '+': ret = 0break;
        
case '-': ret = 1break;
        
case '*': ret = 2break;
        
case '/': ret = 3break;
        
case '(': ret = 4break;
        
case ')': ret = 5break;
        
case '#': ret = 6break;
    }
    
return ret;
}
char Precede(char a, char b){
    
//cout << IsFirst[Change(a)][Change(b)] << endl;
    return IsFirst[Change(a)][Change(b)];
}
void EvaluateExpression(void){
    OPTR.ClearStack(), OPND.ClearStack();
    OPTR.Push(
'#');
    
char ChNow = getchar();
    
while(ChNow != '#' || OPTR.GetTop() != '#'){
        
if (IsNum(ChNow)) {
            
int NowNum = ChNow - '0';
            ChNow 
= getchar();
            
while (IsNum(ChNow)){
                NowNum 
= ChNow - '0' + NowNum * 10;
                ChNow 
= getchar();
            }
            OPND.Push(NowNum);
            
/*
            for (int i = 0; i < OPND.Top; i++)
                cout << OPND.Stack[i] << " ";
            cout << endl; 
*/
        }
        
else {
            
//cout << ChNow << endl;
            switch (Precede(OPTR.GetTop(), ChNow)){
                
case '<':
                    OPTR.Push(ChNow); ChNow 
= getchar();
                    
break;
                
case '=':
                    
char x; OPTR.Pop(x); ChNow = getchar();
                    
break;
                
case '>':
                    
char theta; OPTR.Pop(theta);
                    
int a, b; OPND.Pop(b); OPND.Pop(a);
                    OPND.Push(Operate(a, theta, b));
                    
break;
            }
        }
    }
    cout 
<< OPND.GetTop() << endl;
}
int main(){
    EvaluateExpression();
    
return 0;
}