#include <bits/stdc++.h>
#define qwq puts("debug");
using namespace std;
const int N = 1100000;
struct Treenode {
int l, r, type, val;
bool f;
} a[N];
int n, m, q, p[N];
char ch;
stack<int> s;
inline void dfsinit(int p) {
if (!a[p].type)
return;
if (a[p].type == -1) {
dfsinit(a[p].l);
a[p].val = !a[a[p].l].val;
} else if (a[p].type == -2) {
dfsinit(a[p].l);
dfsinit(a[p].r);
a[p].val = a[a[p].l].val & a[a[p].r].val;
} else {
dfsinit(a[p].l);
dfsinit(a[p].r);
a[p].val = a[a[p].l].val | a[a[p].r].val;
}
}
inline void dfsf(int p) {
if (!a[p].type)
return;
int l = a[p].l, r = a[p].r;
if (a[p].type == -1) {
a[l].f = a[p].f;
dfsf(l);
} else if (a[p].type == -2) {
if (a[l].val == 0)
a[r].f = false;
else
a[r].f = a[p].f;
if (a[r].val == 0)
a[l].f = false;
else
a[l].f = a[p].f;
dfsf(l);
dfsf(r);
} else {
if (a[l].val == 1)
a[r].f = false;
else
a[r].f = a[p].f;
if (a[r].val == 1)
a[l].f = false;
else
a[l].f = a[p].f;
dfsf(l);
dfsf(r);
}
}
int main() {
while (1) {
scanf("%c", &ch);
if (ch == '\n')
break;
n++;
if (ch == 'x') {
int sum = 0;
while (1) {
scanf("%c", &ch);
if (ch >= '0' && ch <= '9')
sum = (sum << 1) + (sum << 3) + (ch ^ 48);
else
break;
}
p[sum] = n;
s.push(n);
} else {
if (ch == '&' || ch == '|') {
int l = s.top();
s.pop();
int r = s.top();
s.pop();
if (ch == '&')
a[n].type = -2;
else
a[n].type = -3;
a[n].l = l;
a[n].r = r;
s.push(n);
} else {
int son = s.top();
s.pop();
a[n].type = -1;
a[n].l = son;
s.push(n);
}
scanf("%c", &ch);
}
if (ch != ' ')
break;
}
dfsinit(s.top());
scanf("%d", &m);
for (int i = 1; i <= m; i++) {
int x;
scanf("%d", &x);
a[p[i]].val = x;
}
a[s.top()].f = true;
dfsf(s.top());
scanf("%d", &q);
for (; q--; ) {
int qx;
scanf("%d", &qx);
if (a[p[qx]].f)
printf("%d\n", a[s.top()].val ^ 1);
else
printf("%d\n", a[s.top()].val);
}
return 0;
}