#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int n,a[N],q,c,d[N],sz,zq[N];
string s,z;
struct T{
int x;
int l;
int r;
}tree[N];
stack<int> num;
inline int numtp(){
int t=num.top();
num.pop();
return t;
}
inline void buildTree(){
int len=s.length();
for(int i=0;i<len;i++){
if(s[i]=='0'||s[i]=='1'){
tree[++sz]=(T){s[i],0,0};
num.push(sz);
zq[i]=sz;
}
else if(s[i]=='&'||s[i]=='|'){
int r=numtp(),l=numtp();
tree[++sz]=(T){s[i],l,r};
num.push(sz);
}
else if(s[i]=='!'){
int l=numtp();
tree[++sz]=(T){s[i],l,0};
num.push(sz);
}
}
}
inline int cal(int id){
if(tree[id].l==0&&tree[id].r==0){
return tree[id].x-'0';
}
char op=tree[id].x;
int lnum=cal(tree[id].l);
if(op=='|'){
if(lnum==1){
return 1;
}
else{
return cal(tree[id].r);
}
}
if(op=='&'){
if(lnum==0){
return 0;
}
else{
return cal(tree[id].r);
}
}
if(op=='!'){
return !lnum;
}
}
int main(){
getline(cin,s);
s.erase(remove(s.begin(),s.end(),' '),s.end());
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=0;i<s.size();i++){
char f=s[i];
if(f=='x'){
d[s[i+1]-'0']=i;
s[i]=char(a[s[i+1]-'0']+48);
s[i+1]='/';
}
}
buildTree();
cin>>q;
for(int i=1;i<=q;i++){
int x;
cin>>x;
if(s[d[x]]=='1'){
s[d[x]]='0';
}
else if(s[d[x]]=='0'){
s[d[x]]='1';
}
tree[zq[d[x]]].x=s[d[x]];
cout<<cal(sz)<<endl;
if(s[d[x]]=='1'){
s[d[x]]='0';
}
else if(s[d[x]]=='0'){
s[d[x]]='1';
}
tree[zq[d[x]]].x=s[d[x]];
}
return 0;
}