#include <fstream>
using namespace std;
const long MAX = 100010;
char S[MAX], *p=S;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
long termen();
long factor();
int numar()
{int nr=0;
while ( *p>='0' && *p<='9' ) { // avem un numar
nr = nr*10 + (*p - '0');
++p;
}
return nr;
}
/*
* Functia eval() va "aduna" toti termenii unei expresii/subexpresii.
*/
long eval() {
long r = termen();
if ( *p=='+' ) {
++p; // trecem peste semnul "+"
r += termen();
}
if ( *p=='-' ) {
++p; // trecem peste semnul "-"
r -= termen();
}
return r;
}
/*
* Functia termen() se ocupa de continutul unui termen. Acesta este compus la randul
* lui din factori inmultiti.
*/
long termen()
{
long r = factor();
if ( *p=='*')
{
++p;
r *= factor();
}
if ( *p=='/' )
{
++p;
r /= factor();
}
return r;
}
/*
* Functia factor() va returna valoarea unui singur factor, care poate fi o subexpresie
* sau un numar natural
*/
long factor() {
long r=0;
if ( *p == '(' ) { // avem o subexpresie
++p; // trecem peste '('
r = eval();
++p; // trecem peste ')'
} else // avem un numar
r = numar();
return r;
}
int main() {
f.get(S, MAX);
g<<eval();
return 0;
}