#include<cstring>
#include<iostream>
#include<fstream>
#include<cmath>
#define LgMax 100005
using namespace std;
struct Nod
{
char inf;
Nod *st, *dr;
int is_number;
};
Nod *root;
char e[LgMax];
int lg;
Nod *CreareArbore(int &i);
Nod *Factor(int &i);
Nod *Termen(int &i);
Nod *Factor(int &i)
{
Nod *p;
if(e[i]=='(')
{
i++;
p=CreareArbore(i);
i++;
return p;
}
p=new Nod;
//p->inf=e[i++];
int nr=0,x;
while(isdigit(e[i]))
{
nr=nr*10+(int)(e[i]-'0');
i++;
}
p->inf=nr;
p->is_number=nr;
p->st=p->dr=NULL;
return p;
}
Nod *Termen(int &i)
{
Nod *p,*r1;
r1=Factor(i);
if(i<=lg && (e[i]=='*' || e[i]=='/') )
{p=new Nod;
p->inf=e[i++];
p->st=r1;
p->dr=Termen(i);
return p;
}
else
return r1;
}
Nod *CreareArbore(int &i)
{
Nod *p,*r1;
if(i>lg) return NULL;
r1=Termen(i);
if(i>lg || e[i]==')') return r1;
p=new Nod;
p->inf=e[i++];
//cout<<p->inf;
p->st=r1;
p->dr=CreareArbore(i);
return p;
}
void preordine(Nod *root)
{
if(root!=NULL)
{
if(root->is_number) cout<<(int)root->inf<<' ';
else cout<<root->inf;
preordine(root->st);
preordine(root->dr);
}
}
//Orice nod are 0 sau 2 fii
bool is_leaf(Nod *p)
{
if(p->st==NULL && p->dr==NULL)
return 1;
return 0;
}
int calc(Nod *p)
{
if(p==NULL) return 0;
if(is_leaf(p))
return p->is_number;
else
{
int A,B;
A=calc(p->st);
B=calc(p->dr);
if(p->inf=='+') return A+B;
else if(p->inf=='*') return A*B;
else if(p->inf=='-') return A-B;
else if(p->inf=='/') return A/B;
}
}
int main()
{
int i=0;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
fin.getline(e,LgMax);
lg=strlen(e)-1;
root=CreareArbore(i);
//preordine(root);
fout<<calc(root);
fin.close();
fout.close();
}