#include <fstream>
#include <iostream>
#include <string.h>
using namespace std;
const char iname[] = "bool.in";
const char oname[] = "bool.out";
#define MAXL 1024
const char T[] = "TRUE";
const char F[] = "FALSE";
const char AND[] = "AND";
const char NOT[] = "NOT";
const char OR[] = "OR";
int V[256];
int f(char O[], int cnt)
{
int S[MAXL], cnts = 0;
for (int i = 0; i < cnt; ++ i) {
if (('A' <= O[i]) && (O[i] <= 'Z'))
S[cnts ++] = V[O[i]];
else if ((O[i] == '0') || (O[i] == '1'))
S[cnts ++] = O[i] - '0';
else if (O[i] == '!')
S[cnts - 1] ^= 1;
else if (O[i] == '&')
S[cnts - 2] = S[cnts - 2] & S[cnts - 1], cnts --;
else if (O[i] == '|')
S[cnts - 2] = S[cnts - 2] | S[cnts - 1], cnts --;
// for (int j = 0; j < cnts; ++ j)
// printf("%d", S[j]);
// printf("\n");
}
return S[0];
}
int Op(char E[], int i, int len)
{
if ((i + 3 < len) && (strncmp(E + i, OR, 2) == 0))
return 1;
if ((i + 4 < len) && (strncmp(E + i, AND, 3) == 0))
return 2;
if ((i + 4 < len) && (strncmp(E + i, NOT, 3) == 0))
return 3;
return 0;
}
int Const(char E[], int i, int len)
{
if ((i + 4 < len) && (strncmp(E + i, T, 4) == 0))
return 1;
if ((i + 5 < len) && (strncmp(E + i, F, 5) == 0))
return 0;
return -1;
}
int main(void)
{
char E[MAXL], S[MAXL], O[MAXL], ch;
int n;
int cnts, cnto, i, len;
ifstream fin(iname);
fin.getline(E, MAXL);
len = int(strlen(E));
for (i = len; i > 0; -- i) {
E[i] = E[i - 1];
}
E[0] = '(', E[++ len] = ')', E[++ len] = 0;
for (cnts = cnto = i = 0; i < len; ++ i) {
if (E[i] == ' ') {
// printf("spatiu\n");
continue ;
} else if (E[i] == '(') {
S[cnts ++] = '(';
// printf("(\n");
} else if (Op(E, i, len)) {
int pr = Op(E, i, len);
// printf("prioritate %d\n", pr);
if (pr == 1)
S[cnts ++] = '|', i += 1;
else if (pr == 2)
S[cnts ++] = '&', i += 2;
else if (pr == 3)
S[cnts ++] = '!', i += 2;
} else if (Const(E, i, len) != -1) {
// printf("operator const %d\n", Const(E, i, len));
int cnst = Const(E, i, len);
O[cnto ++] = cnst + '0';
if (cnst == 0)
i += 4;
else
i += 3;
} else if (E[i] == ')') {
// printf(")\n");
while (S[cnts - 1] != '(')
O[cnto ++] = S[-- cnts];
cnts --;
} else {
// printf("operand %c\n", E[i]);
O[cnto ++] = E[i];
}
S[cnts] = 0, O[cnto] = 0;
}
O[cnto] = 0;
// printf("%s\n", O);
ofstream fout(oname);
for (fin >> n; n > 0; -- n) {
fin >> ch;
V[ch] ^= 1;
fout << f(O, cnto);
}
fin.close();
fout.close();
return 0;
}