#include<bits/stdc++.h>
#define int long long
using namespace std;
string w;
char jsf[1000010];
int sm;
stack<int> sta;
int ii=0,n;
int jj=1;
struct lyl{
int fa,l,r;
bool sf;
char js;
bool gt;
};
lyl a[1000010];
void get_arr(string a){
int sam=0,p=0;
int l=a.size();
for(int i=0;i<l;i++){
if(a[i]=='x'){
p=1;
}else{
if(a[i]==' '&&p==1){
sta.push(sam);
sam=0;
p=0;
}else{
if(p==1){
sam=sam*10+(a[i]-'0');
}else{
if(a[i]=='&'||a[i]=='|'||a[i]=='!'){
ii++;
jsf[ii]=a[i];
}
}
}
}
}
}
int dfs(int x){
if(a[x].js=='&'){
if((a[a[x].l].sf&&a[a[x].r].sf)!=a[x].sf){
a[x].sf=!a[x].sf;
int t=dfs(a[x].fa);
a[x].sf=!a[x].sf;
return t;
}else{
return a[jj].sf;
}
}else{
if((a[a[x].l].sf||a[a[x].r].sf)!=a[x].sf){
a[x].sf=!a[x].sf;
int t=dfs(a[x].fa);
a[x].sf=!a[x].sf;
return t;
}else{
return a[jj].sf;
}
}
}
signed main(){
getline(cin,w);
get_arr(w);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].sf;
a[i].l=0;
a[i].r=0;
}
sm=n;
while(sta.size()>1){
if(jsf[jj]=='!'){
a[sta.top()].gt=!a[sta.top()].gt;
jj++;
}else{
if(jsf[jj]=='&'){
n++;
a[n].js='&';
a[n].l=sta.top();
a[sta.top()].fa=n;
sta.pop();
a[n].r=sta.top();
a[sta.top()].fa=n;
sta.pop();
sta.push(n);
}else{
if(jsf[jj]=='|'){
n++;
a[n].js='|';
a[n].l=sta.top();
sta.pop();
a[n].r=sta.top();
sta.pop();
sta.push(n);
}
}
}
}
for(int i=1;i<=jj;i++){
if(a[i].l==0&&a[i].r==0){
}else{
if(a[i].js=='&'){
if(a[a[i].l].sf&&a[a[i].r].sf){
a[i].sf=1;
}else{
a[i].sf=0;
}
}else{
if(a[a[i].l].sf||a[a[i].r].sf){
a[i].sf=1;
}else{
a[i].sf;
}
}
}
if(a[i].gt){
a[i].sf=!a[i].sf;
}
}
int q;
cin>>q;
int xw;
for(int i=1;i<=q;i++){
cin>>xw;
a[xw].sf=!a[xw].sf;
cout<<dfs(a[xw].fa)<<endl;
a[xw].sf=!a[xw].sf;
}
return 0;
}