#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 100010
int cnt,a[N],n,m;
bool vis[N];
char c[N];
string s;
int h[N];
stack<int> sta;
struct node{
int nex;
int to;
}g[2*N];
void add(int u,int v){
cnt++;
g[cnt].nex=h[u];
h[u]=cnt;
g[cnt].to=v;
}
void build(){
int f=0;
for(int i=0;i<s.size();i++){
if(s[i]<='9'&&s[i]>='0'){
f=f*10+(s[i]-'0');
if(s[i+1]>'9'||s[i+1]<'0'){
sta.push(f);
f=0;
}
}
else if(s[i]=='!'){
int l=sta.top();
sta.pop();
int wy=a[l];
m++;
c[m]=s[i];
add(m,l);
sta.push(m);
a[m]=!wy;
}
else if(s[i]=='&'||s[i]=='|'){
m++;
c[m]=s[i];
int u=sta.top();sta.pop();
int y=sta.top();sta.pop();
int p=a[u],q=a[y];
add(m,u);add(m,y);
sta.push(m);
int l;
if(s[i]=='&'){
l=p&q;
}
else{
l=p|q;
}
a[m]=l;
}
}
return ;
}
void dfs(int x){
vis[x]=1;
if(x<=n) return ;
if(c[x]=='!'){
int l=g[h[x]].to;
dfs(l);
}
else if(c[x]=='&'){
int l=g[h[x]].to,r=g[g[h[x]].nex].to;
if(a[l]==0) dfs(l);
else if(a[r]==0) dfs(r);
}
else if(c[x]=='|'){
int l=g[h[x]].to,r=g[g[h[x]].nex].to;
if(a[l]==1) dfs(l);
else if(a[r]==1) dfs(r);
}
}
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
getline(cin,s);
cin>>n;
m=n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build();
int ans=a[m];
dfs(m);
int q;
cin>>q;
for(int i=1;i<=q;i++){
int qw;
cin>>qw;
if(vis[qw]==1) cout<<!ans<<'\n';
else cout<<ans<<'\n';
}
return 0;
}