#include <cstdio>
#include <cassert>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string expr;
vector<vector<char>> ops = {{'+', '-'}, {'*', '/'}};
int applyOp(int lhs, int rhs, char op) {
switch (op) {
case '+': {
return lhs + rhs;
}
case '-': {
return lhs - rhs;
}
case '*': {
return lhs * rhs;
}
case '/': {
return lhs / rhs;
}
}
}
bool matches(char op, int priority) {
for (auto& cand : ops[priority]) {
if (cand == op) {
return true;
}
}
return false;
}
int eval(string& expr, size_t& idx, int priority) {
if (priority == ops.size()) {
assert(isdigit(expr[idx]) || expr[idx] == '(');
if (isdigit(expr[idx])) {
int result = 0;
while (idx < expr.size() && isdigit(expr[idx])) {
result = result * 10 + expr[idx++] - '0';
}
return result;
}
int result = eval(expr, ++idx, 0);
idx++;
return result;
}
int result = eval(expr, idx, priority + 1);
while (idx < expr.size() && matches(expr[idx], priority)) {
char op = expr[idx++];
result = applyOp(result, eval(expr, idx, priority + 1), op);
}
return result;
}
int main() {
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
cin >> expr;
size_t idx = 0;
cout << eval(expr, idx, 0) << "\n";
return 0;
}