#include<fstream.h>
#include<string.h>
ifstream f("bool.in");
ofstream g("bool.out");
char s[1050],*q,c,s1[]="NOT",s2[]="AND",s3[]="OR",s4[]="TRUE",s5[]="FALSE",st[1050];
int p[1000],n,z,a[30],exp[1050],x,y,i,j,m;
void modificare()
{
q=strstr(s,s1);
while(q)
{
strcpy(q,q+2);
z=q-s;
s[z]='!';
q=strstr(q,s1);
}
q=strstr(s,s2);
while(q)
{
strcpy(q,q+2);
z=q-s;
s[z]='&';
q=strstr(q,s2);
}
q=strstr(s,s3);
while(q)
{
strcpy(q,q+1);
z=q-s;
s[z]='|';
q=strstr(q,s3);
}
q=strstr(s,s4);
while(q)
{
strcpy(q,q+3);
z=q-s;
s[z]=',';
q=strstr(q,s4);
}
q=strstr(s,s5);
while(q)
{
strcpy(q,q+4);
z=q-s;
s[z]=':';
q=strstr(q,s5);
}
q=strstr(s," ");
while(q)
{
strcpy(q,q+1);
q=strstr(q," ");
}
}
void schimbare(char c)
{
if(a[c-'A']==0)
a[c-'A']=1;
else
a[c-'A']=0;
}
void operatie(int x,char c)
{
if(c=='!')
if(exp[x]==0)
exp[x]=1;
else
exp[x]=0;
else
if(c=='&')
if(exp[x-1]==1&&exp[x]==1)
exp[x-1]=1;
else
exp[x-1]=0;
else
if(exp[x-1]==0&&exp[x]==0)
exp[x-1]=0;
else
exp[x-1]=1;
}
int main()
{
int k;
f.getline(s,1045);
f>>n;
f.get();
p['!']=3;
p['&']=2;
p['|']=1;
modificare();
m=strlen(s);
for(k=1;k<=n;k++)
{
f>>c;
schimbare(c);
i=0; x=0;y=0;
while(i<m)
{
if((s[i]>='A'&&s[i]<='Z')||(s[i]==','||s[i]==':'))
{
if(s[i]>='A'&&s[i]<='Z')
exp[++x]=a[s[i]-'A'];
else
if(s[i]==',')
exp[++x]=0;
else
exp[++x]=1;
}
else
{
if(s[i]=='(')
st[y++]='(';
else
if(s[i]==')')
{
j=y-1;
while(st[j]!='(')
{
operatie(x,st[j]);
if(st[j]!='!')
x--;
j--;y--;
}
y--;
}
else
{
j=y-1;
while(st[j]!='('&&j>=0)
{
if(p[st[j]]>=p[s[i]])
{
operatie(x,st[j]);
y--;
if(st[j]!='!')
x--;
}
j--;
}
st[y++]=s[i];
}
}
i++;
}
operatie(x,st[0]);
g<<exp[1];
}
f.close();
g.close();
return 0;
}