#include<string>
#include<cctype>
#include<iostream>
#include<utility>
#include <functional>
using namespace std;
bool getint(string &s, int &a)
{
int ret = 0;
if (s.size() == 0 || !isdigit(s[0]))
return false;
for (int i = 0, n = (int)s.size(); i < n; i++) {
if (isdigit(s[i]))
ret = ret * 10 + s[i] - '0';
else
{
s = s.substr(i);
a = ret;
return true;
}
}
s = "";
a = ret;
return true;
}
bool getop(string &s, char &a)
{
if (s.size() == 0 || !isgraph(s[0]))
return false;
switch (s[0])
{
case '+':
a = '+';
s = s.substr(1);
return true;
break;
case '-':
a = '-';
s = s.substr(1);
return true;
break;
case '*':
a = '*';
s = s.substr(1);
return true;
break;
case '/':
a = '/';
s = s.substr(1);
return true;
default:
return false;
break;
}
}
bool jisuan(int &a, int &b, char &q) {
if (a == 0 && b == 0) return false;
switch (q) {
case '+':
a += b;
b = 0;
return true;
break;
case '-':
a -= b;
b = 0;
return true;
break;
case '*':
a *= b;
b = 0;
return true;
break;
case '/':
a /= b;
b = 0;
return true;
break;
}
}
template <typename T>
//using parser = bool(*)(string &, T &);
using parser = function<bool(string &, T &)>;
template <typename T1, typename T2>
/*bool seq(parser <T1>f1, parser <T2>f2, string &s, pair<T1, T2> &out) {
string w=s;
T1 a; T2 b;
if (!f1(s, a)) {
s = w;
return false;
}
if (!f2(s, b)) {
s = w;
return false;
}
out.first = a;
out.second = b;
return true;
}*/
parser<pair<T1, T2>> seq(parser<T1> f1, parser<T2> f2) {
return [=](string &s, pair<T1, T2>&out) {
string w = s;
T1 a; T2 b;
if (!f1(s, a)) {
s = w;
return false;
}
if (!f2(s, b)) {
s = w;
return false;
}
out.first = a;
out.second = b;
return true;
}:
}
int main() {
string s;
cin >> s;
int a, b;
bool i = true;
char q;
pair<char,int> out;
getint(s, a);
while (seq(getop, getint)(s, out))
jisuan(a, out.second, out.first);
cout << a << endl;
system("pause");
}