#include<iostream>
#include<string>
#include<stack>
using namespace std;
bool x[100001];
stack<int>sta;
string st;
int pos=0;
string sub()
{
if (st[pos]!=' ') return st[pos++]+sub();
}
bool jisuan()
{
switch(sta.top())
{
case -1:
{
sta.pop();return x[jisuan()]&x[jisuan()];
}
case -2:
{
sta.pop();return x[jisuan()]|x[jisuan()];
}
case -3:
{
sta.pop();return !x[jisuan()];
}
default:
{
int num=sta.top();sta.pop();return num;
}
}
}
int main()
{
freopen("expr.in","r",stdin);
freopen("expr.out","w",stdout);
int n,q,c;
getline(cin,st);
while (pos<st.size())
{
string s=sub();
if (s=="&"||s=="|"||s=="!")
{
if (s=="&") sta.push(-1);
else if (s=="|") sta.push(-2);
else if (s=="!") sta.push(-3);
}
else
{
int sum=0;
for (int i=1;i<st.size();++i)
{
sum*=10;sum+=st[i]-'0';
}
sta.push(sum);
}
}
cin>>n;
for (int i=1;i<=n;++i) cin>>x[i];
cin>>q;
for (int i=1;i<=q;++i)
{
cin>>c;
x[c]=!x[c];
cout<<jisuan()<<endl;
x[c]=!x[c];
}
return 0;
}