#include <fstream>
#include <vector>
#include <stack>
#include <string>
using namespace std;
ifstream in ("evaluare.in");
ofstream out ("evaluare.out");
string Data;
stack <int> Operators;
char Priority[101];
vector <int> Numbers;
int BuildNumber (int &pos, int nr = 0)
{
for (;pos < Data.size() and isdigit(Data[pos]); ++pos)
{
nr = nr * 10 + (Data[pos] - '0');
}
return nr;
}
void Calculate (char op)
{
int y = Numbers.back(); Numbers.pop_back();
int x = Numbers.back(); Numbers.pop_back();
if (op == '+') Numbers.push_back(x + y);
else if (op == '-') Numbers.push_back(x - y);
else if (op == '*') Numbers.push_back(x * y);
else Numbers.push_back(x / y);
}
void Evaluate()
{
for (int pos = 0; pos < Data.size(); ++pos)
{
if (isdigit(Data[pos]))
{
Numbers.push_back(BuildNumber(pos));
pos--;
}
else
{
if (Data[pos] == '(') Operators.push(Data[pos]);
else
{
if (Data[pos] == ')')
{
while (Operators.top() != '(')
{
Calculate(Operators.top());
Operators.pop();
}
Operators.pop();
}
else
{
while (!Operators.empty() and Priority[Operators.top()] >= Priority[Data[pos]])
{
Calculate(Operators.top());
Operators.pop();
}
Operators.push(Data[pos]);
}
}
}
}
while (!Operators.empty())
{
Calculate(Operators.top());
Operators.pop();
}
}
int main()
{
Priority['*'] = Priority['/'] = 2;
Priority['-'] = Priority['+'] = 1;
Priority['('] = Priority[')'] = 0;
in >> Data;
Evaluate();
out << Numbers.back() << '\n';
out.close();
return 0;
}