#include <cstdio>
#include <cstring>
#include <cctype>
const int LENMAX = 100010;
const int NMAX = 101;
bool val[LENMAX];
int N;
bool expresie (), factor(), termen ();
char s[NMAX];
char *poz;
void a () {
while (*poz == ' ') {
poz++;
}
}
bool NOT (char c, char v) {
if (c == 'F' && v == 'A') {
++poz; ++poz; ++poz; ++poz; ++poz; a ();
return 1;
}
if (c == 'T' && v == 'R') {
++poz; ++poz; ++poz; ++poz; a ();
return 0;
}
if (val[c - 'A'] == 0) {
++poz; a ();
return 1;
}
if (val[c - 'A'] == 1) {
++poz; a ();
return 0;
}
}
bool VAL (char c, char v) {
if (c == 'T' && v == 'R') {
++poz; ++poz; ++poz; ++poz; a ();
return 0;
}
if (c == 'F' && v == 'A') {
++poz; ++poz; ++poz; ++poz; ++poz; a ();
return 1;
}
if (val[c - 'A'] == 0) {
++poz; a ();
return 0;
}
if (val[c - 'A'] == 1) {
++poz; a ();
return 1;
}
}
bool expresie () {
a ();
bool ans = termen ();
while (*poz == 'O' && *(poz + 1)== 'R') {
++poz; ++poz; a ();
ans = (ans || termen ());
a ();
}
return ans;
}
bool termen () {
a ();
bool ans = factor ();
while (*poz == 'A' && *(poz + 1) == 'N') {
++poz; ++poz; ++poz; a ();
ans = (ans && factor ());
a ();
}
return ans;
}
bool factor () {
a ();
bool ans = 0;
if (*poz == '(') {
++poz; a ();
ans = expresie ();
++poz; a ();
return ans;
}
if (*poz == 'N' && *(poz + 1) == 'O') {
++poz; ++poz; ++poz; a ();
return NOT (*poz, *(poz + 1));
}
return VAL (*poz, *(poz + 1));
}
int main () {
freopen ("bool.in", "r", stdin);
freopen ("bool.out", "w", stdout);
gets (s);
poz = s;
scanf ("%d ", &N);
char C;
for (int i = 1; i <= N; i++) {
scanf ("%c", &C);
val[C - 'A'] = (val[C - 'A'] == 1)? 0:1;
poz = s;
int ans = expresie ();
printf ("%d", ans);
}
printf ("\n");
return 0;
}