#include<bits/stdc++.h>
int n,q,x[100001],num,id,len,nx[100001];
struct Node{
int v,l,r,idx;
}tree[1000001];
struct Vec{
char val;
int no;
};
vector<Vec> af;
string s;
stack<int> st;
void build(){
for(int i=0;i<af.size();i++){
if(af[i].val=='1'||af[i].val=='0'){
tree[++num]=Node{af[i].val-'0',-1,-1,af[i].no};
nx[af[i].no]=num;
st.push(num);
}else if(af[i].val!='!'){
int r=st.top();st.pop();
int l=st.top();st.pop();
int v=(af[i].val=='&'?2:3);
tree[++num]=Node{v,l,r,0};
st.push(num);
}else{
int f=st.top();st.pop();
int v=4;
tree[++num]=Node{v,f,-1,0};
st.push(num);
}
}
}
int dfs(int u){
if(tree[u].v==0||tree[u].v==1) return tree[u].v;
int l=dfs(tree[u].l);
if(tree[u].v==4){
return !l;
}
if(l==0&&tree[u].v==2){
return 0;
}
if(l==1&&tree[u].v==3){
return 1;
}
int r=dfs(tree[u].r);
return r;
}
int main(){
getline(cin,s);
len=s.size();
cin>>n;
for(int i=1;i<=n;i++){
cin>>x[i];
}
int nr=0;
for(int i=0;i<len;i++){
if(s[i]=='x'){
nr=0;
}else if(s[i]=='&'){
af.push_back({'&',0});
}else if(s[i]=='|'){
af.push_back({'|',0});
}else if(s[i]=='!'){
af.push_back({'!',0});
}else if(s[i]!=' '){
nr=(nr<<1)+(nr<<3)+(s[i]^'0');
}else{
if(nr){
af.push_back({(char)(x[nr]|48),nr});
nr=0;
}
}
}
build();
cin>>q;
while(q--){
cin>>id;
tree[nx[id]].v^=1;
cout<<dfs(num)<<'\n';
tree[nx[id]].v^=1;
}
return 0;
}