#include <bits/stdc++.h>
using namespace std;
map<char, int> priority = {
{ '|', 1 },{ '&', 2 },{ '!', 3 },{ '(', 0 }
};
vector<string> poststr;
stack<char> op;
void topoststr(string &str) {
string num;
for (int i = 0; i < str.size(); i++) {
if (isdigit(str[i])) {
num.clear();
while (isdigit(str[i])) {
num.push_back(str[i]);
i++;
}
poststr.push_back(num);
--i;
}
else if (str[i] == '(') {
op.push(str[i]);
}
else if (str[i] == ')') {
while (op.top() != '(') {
string tmp;
tmp = op.top();
poststr.push_back(tmp);
op.pop();
}
op.pop();
}
else {
while (!op.empty() && priority[str[i]] < priority[op.top()]) {
string tmp;
tmp = op.top();
poststr.push_back(tmp);
op.pop();
}
op.push(str[i]);
}
}
while (!op.empty()) {
string tmp;
tmp.push_back(op.top());
poststr.push_back(tmp);
op.pop();
}
}
int calculate(string &str) {
stack<int> res;
topoststr(str);
for (unsigned int i = 0; i < poststr.size(); i++) {
if (isdigit(poststr[i][0])) {
res.push(atoi(poststr[i].c_str()));
}
else {
int right = res.top();
res.pop();
if (!res.empty()) {
int left = res.top();
res.pop();
switch (poststr[i][0]) {
case '&': res.push(right & left); break;
case '|': res.push(right | left); break;
case '!': res.push(!right); break;
}
}
if (poststr[i][0] == '!') {
res.push(!right);
}
}
}
return res.top();
}
int main()
{
string str;
while (cin >> str)
cout << calculate(str) << endl;
return 0;
}