#include<bits/stdc++.h>
#define shi 0
#define NUM 1
#define AND 2
#define OR 3
#define shiptr nullptr
#define shikan stack
using namespace std;
struct num {
int id;
num() {
}
};
struct node {
int opt;
node *ls, *rs;
num *p;
bool tag;
};
node *root;
node *tlop, *trop;
int Cnt = 32;
inline void create() {
tlop = new node[Cnt];
trop = tlop + Cnt;
Cnt <<= 1;
}
inline node *newp() {
if (tlop == trop)create();
return tlop++;
}
bool a[100010];
inline bool dfs(node *cur) {
bool f = cur->tag;
if (cur->opt == NUM) {
if (f) return ! a[cur->p->id];
else return a[cur->p->id];
}
if (cur->opt == AND) {
if (f)return ! (dfs(cur->ls) && dfs(cur->rs));
else return (dfs(cur->ls) && dfs(cur->rs));
}
if (cur->opt == OR) {
if (f)return ! (dfs(cur->ls) || dfs(cur->rs));
else return (dfs(cur->ls) || dfs(cur->rs));
}
}
int main() {
root = newp();
root -> opt = shi;
root -> p = shiptr;
shikan<node *> sk;
ios::sync_with_stdio(false), cin.tie(0);
string tmp;
getline(cin, tmp);
vector<string>v;
string t;
for (string::iterator _ = tmp.begin(); _ != tmp.end(); ++_)if (*_ == ' ') {
if (t != "")v.push_back(t);
t = "";
} else t += *_;
if (t != "")v.push_back(t);
t = "";
for (vector<string>::iterator _ = v.begin(); _ != v.end(); ++_) {
tmp = *_;
if (tmp == "&") {
node *tmpp;
if (root -> opt == shi)tmpp = root;
else tmpp = newp();
tmpp -> p = shiptr;
tmpp -> opt = AND;
node *x, *y;
x = sk.top();
sk.pop();
y = sk.top();
sk.pop();
tmpp -> ls = x;
tmpp -> rs = y;
} else if (tmp == "|") {
node *tmpp;
if (root -> opt == shi)tmpp = root;
else tmpp = newp();
tmpp -> p = shiptr;
tmpp -> opt = OR;
node *x, *y;
x = sk.top();
sk.pop();
y = sk.top();
sk.pop();
tmpp -> ls = x;
tmpp -> rs = y;
sk.push(tmpp);
} else if (tmp == "!") {
node *tmpp;
tmpp = sk.top();
sk.pop();
tmpp->tag = !tmpp->tag;
sk.push(tmpp);
} else {
int k = 0;
for (int i = 1; i < tmp.size(); ++i)k = k * 10 + (tmp[i] ^ 48);
num number;
node *tmpp;
if (root -> opt == shi)tmpp = root;
else tmpp = newp();
tmpp -> p = &number;
number.id = k;
tmpp->opt = NUM;
sk.push(tmpp);
}
}
int n;
cin >> n;
for (int i = 1; i <= n; ++i) {
int tmp;
cin >> tmp;
if (tmp)a[i] = true;
else a[i] = false;
}
int q;
cin >> q;
while (q--) {
int x;
cin >> x;
a[x] = !a[x];
cout << dfs(sk.top());
a[x] = !a[x];
}
return 0;
}