#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std;
char z[1000];
int a[10000],atop=0,ztop=0;
char b[10000];
int main(){
gets(b);
int l=strlen(b);
int n,wdnmdd[10000],hh[10000];
cin >>n;
for(int i=1;i<=n;i++){
cin>>hh[i];
wdnmdd[i]=hh[i];
}
int q,x[10000];
cin >>q;
for(int i=0;i<q;i++){
cin >>x[i];
}
for(int d=0;d<q;d++){
wdnmdd[x[d]]=!hh[x[d]];
for(int i=0;i<l;i++){
if(b[i]>='0'&&b[i]<='9'){
a[atop]=wdnmdd[b[i]-'0'];
atop++;
}
if(b[i]=='|'){
z[ztop]=b[i];
ztop++;
if(atop-1>=2){
if(a[atop-1]|a[atop-2]){
a[atop-2]=1;
atop--;
}else{
a[atop]=0;
}
ztop--;
}
}
if(b[i]=='&'){
z[ztop]=b[i];
ztop++;
if(atop-1>=2){
if(a[atop-1]&a[atop-2]){
a[atop-2]=1;
atop--;
}else{
a[atop]=0;
}
ztop--;
}
}
if(b[i]=='!'){
z[ztop]=b[i];
ztop++;
if(atop-1>=1){
a[atop-1]=!a[atop-1];
}
}
}
cout <<a[0]<<endl;
atop=0;
ztop=0;
for(int i=1;i<=n;i++){
wdnmdd[i]=hh[i];
}
}
return 0;
}