#include<bits/stdc++.h>
using namespace std;
char c[1000010];
int arr[1000010];
int bj[1000010];
struct node{
bool bl;
int id;
};
stack <node> s;
int n,m,l;
void qwq(){
freopen("P7073_1.in","r",stdin);
fgets(c+1,1000010,stdin);
l=strlen(c+1);
cin>>n;
for(int i=1;i<=n;i++) cin>>arr[i];
for(int i=1;i<=l;i++){
if(c[i]=='x'){
int x;
sscanf(c+i+1,"%d",&x);
bool ccf=arr[x];
s.push({ccf,x});
}else if(c[i]=='!'){
node qqq=s.top();
s.pop();
s.push({!qqq.bl,i});
bj[qqq.id]=i;
}else if(c[i]=='&'){
node a=s.top(); s.pop();
node b=s.top(); s.pop();
s.push({a.bl&&b.bl,i});
if(a.bl) bj[b.id]=i;
if(b.bl) bj[a.id]=i;
}else if(c[i]=='|'){
node a=s.top(); s.pop();
node b=s.top(); s.pop();
s.push({a.bl||b.bl,i});
if(!a.bl) bj[b.id]=i;
if(!b.bl) bj[a.id]=i;
}
}
}
int main(){
qwq();
cin>>m;
bool ans=s.top().bl;
for(int i=1;i<=m;i++){
int x,y;
cin>>x;
for(y=x;bj[y];y=bj[y]);
cout<<i<<" "<<x<<" ";
if(y==l-1) cout<<!ans<<endl;
else cout<<ans<<endl;
}
return 0;
}