玄学代码,WA on # 6,14
#include <bits/stdc++.h>
using namespace std;
string s;
int n,a[1000005],b[100005],l,x,m,stk[100005],top,prt[100005],bj[100005],v[1000005];
int f(int y)
{
if(!prt[y]) return y;
return f(prt[y]);
}
int main()
{
while(1)
{
cin>>s;
int k=s.length();
if(s[0]>='0'&&s[0]<='9')
{
for(int i=0;i<k;i++) n=n*10+s[i]-'0';
break;
}
if(s[0]=='x')
{
l++;
for(int i=1;i<k;i++) a[l]=a[l]*10+s[i]-'0';
}
else if(s[0]=='!') a[++l]=-1;
else if(s[0]=='|') a[++l]=-2;
else a[++l]=-3;
}
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=l;i++)
{
if(a[i]>0) stk[++top]=a[i],v[top]=b[a[i]];
else if(a[i]==-1) v[top]^=1;
else if(a[i]==-2)
{
if(v[top]&&v[top-1]) bj[stk[top]]=bj[stk[top-1]]=1;
else if(v[top]) bj[stk[top-1]]=1,v[top-1]=1,stk[top-1]=stk[top];
else if(v[top-1]) bj[stk[top]]=1;
else prt[stk[top]]=stk[top-1];
top--;
}
else if(a[i]==-3)
{
if(!v[top]&&!v[top-1]) bj[stk[top]]=bj[stk[top-1]]=1;
else if(!v[top]) bj[stk[top-1]]=1,v[top-1]=0,stk[top-1]=stk[top];
else if(!v[top-1]) bj[stk[top]]=1;
else prt[stk[top]]=stk[top-1];
top--;
}
}
cin>>m;
for(int i=1;i<=m;i++)
{
int q=1;
cin>>x;
while(prt[x])
{
if(bj[x]) {cout<<v[1]<<'\n';q=0;break;}
x=prt[x];
}
if(q) cout<<(v[1]^bj[x]^1)<<'\n';
}
return 0;
}