#include<bits/stdc++.h>
using namespace std;
int n,q,a,l,k;
int f[1005];
char ch[1000005];
bool x[1005],x1[1005];
int find(int x){
if(f[x]!=x)f[x]=find(f[x]);
return f[x];
}
int main(){
while(ch[k-1]!='\n'){
scanf("%c",&ch[k]);
k++;
}
cin>>n;
l=strlen(ch);
for(int i=1;i<=n;i++){
cin>>x[i];
f[i]=i;
x1[i]=x[i];
}
cin>>q;
while(q--){
cin>>a;
for(int i=1;i<=n;i++)x1[i]=x[i],f[i]=i;
if(x1[a])x1[a]=0;
else x1[a]=1;
for(int i=0;i<l;i++){
if(ch[i]=='!'){
for(int j=i;j>=0;j--){
if(ch[j]>='0'&&ch[j]<='9'){
x1[find(ch[j]-'0')]=!x1[find(ch[j]-'0')];
// printf("%cx%d=%d -----",ch[i],ch[j]-'0',x1[find(ch[j]-'0')]);
break;
}
}
continue;
}
if(ch[i]=='&'){
int a,b,fa,fb,j;
for(j=i;j>=0;j--){
if(ch[j]>='0'&&ch[j]<='9'){ //找到一个数字!
fa=find(ch[j]-'0'); //找他爸爸
// printf("x%d ",ch[j]-'0');
break;
}
}
for(;j>=0;j--){
if(ch[j]>='0'&&ch[j]<='9'){ //又找到一个数字!
if(find(ch[j]-'0')!=fa){
fb=find(ch[j]-'0');
// printf("%c x%d",ch[i],ch[j]-'0');
break;
}
}
}
x1[fa]=x1[fa]*x1[fb];
// printf("=%d----",x1[fb]);
f[fb]=fa;
continue;
}
if(ch[i]=='|'){
int a,b,fa,fb,j;
for(j=i;j>=0;j--){
if(ch[j]>='0'&&ch[j]<='9'){ //找到一个数字!
fa=find(ch[j]-'0'); //找他爸爸
// printf("x%d ",ch[j]-'0');
break;
}
}
for(;j>=0;j--){
if(ch[j]>='0'&&ch[j]<='9'){ //又找到一个数字!
if(find(ch[j]-'0')!=fa){
fb=find(ch[j]-'0');
// printf("%c x%d",ch[i],ch[j]-'0');
break;
}
}
}
x1[fa]=x1[fa]+x1[fb];
// printf("=%d----",x1[fb]);
f[fb]=fa; //终极奥义·合并!
continue;
}
}
printf("%d\n",x1[find(1)]); //因为所有的都合并过了,所一随便输出一个(别告诉我你n=0)
}
}