#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define MAXS 1000
#define NRLIT 26
char s[MAXS];
int sIndex;
int ssize;
bool values[NRLIT];
bool evaluate();
void simplify(){
int i, ssize;
ssize = strlen(s);
i = sIndex = 0;
while(i < ssize){
if(s[i] >= 'A' && s[i] <= 'Z'){
if(s[i] == 'A' && i + 1 < ssize && s[i + 1] == 'N'){
s[sIndex] = '&';
i += 3;
}
else if(s[i] == 'O' && i + 1 < ssize && s[i + 1] == 'R'){
s[sIndex] = '|';
i += 2;
}
else if(s[i] == 'N' && i + 1 < ssize && s[i + 1] == 'O'){
s[sIndex] = '!';
i += 3;
}
else if(s[i] == 'F' && i + 1 < ssize && s[i + 1] == 'A'){
s[sIndex] = '0';
i += 5;
}
else if(s[i] == 'T' && i + 1 < ssize && s[i + 1] == 'R'){
s[sIndex] = '1';
i += 4;
}
else{
s[sIndex] = s[i];
i++;
}
sIndex++;
}
else if(s[i] == '(' || s[i] == ')'){
s[sIndex] = s[i];
sIndex++;
i++;
}
else{
i++;
}
}
for(i = sIndex; i < ssize; i++){
s[i] = '\0';
}
}
bool factor(){
bool rez;
if(s[sIndex] == '('){
sIndex++;
rez = evaluate();
sIndex++;
}
else if(s[sIndex] == '!'){
sIndex++;
rez = !factor();
}
else{
rez = false;
if(s[sIndex] >= 'A' && s[sIndex] <= 'Z'){
rez = values[s[sIndex] - 'A'];
sIndex++;
}
else if(s[sIndex] == '0' || s[sIndex] == '1'){
rez = s[sIndex] - '0';
sIndex++;
}
}
return rez;
}
bool and_op(){
bool rez;
rez = factor();
while(s[sIndex] == '&'){
sIndex++;
rez &= factor();
}
return rez;
}
bool evaluate(){
bool rez;
rez = and_op();
while(s[sIndex] == '|'){
sIndex++;
rez |= and_op();
}
return rez;
}
int main() {
FILE *fin, *fout;
fin = fopen("bool.in", "r");
fout = fopen("bool.out", "w");
int n, i;
char ch;
fgets(s, MAXS, fin);
simplify(); // AND = &, OR = |, NOT = !, FALSE = 0, TRUE = 1
// Removes all spaces
fscanf(fin, "%d ", &n);
for(i = 0; i < NRLIT; i++){
values[i] = false;
}
for(i = 0; i < n; i++){
ch = fgetc(fin);
values[ch - 'A'] = !values[ch - 'A'];
sIndex = 0;
fprintf(fout, "%d", evaluate());
}
fclose(fin);
fclose(fout);
return 0;
}