Cod sursa(job #536059)
#include<cstdio>
bool val[26];
char sch[105],v[1005],s[1005],si[1005];
int n,poz;
void edit()
{
int q=0;
for(int i=0;si[i];i++)
{
if(si[i]==' ')
continue;
if(si[i]=='N' && si[i+1]=='O' && si[i+2]=='T')
{
i+=2;
s[q++]='!';
continue;
}
if(si[i]=='O' && si[i+1]=='R')
{
i+=1;
s[q++]='|';
continue;
}
if(si[i]=='A' && si[i+1]=='N' && si[i+2]=='D')
{
i+=2;
s[q++]='&';
continue;
}
if(si[i]=='T' && si[i+1]=='R' && si[i+2]=='U' && si[i+3]=='E')
{
i+=3;
s[q++]='1';
continue;
}
if(si[i]=='F' && si[i+1]=='A' && si[i+2]=='L' && si[i+3]=='S' && si[i+4]=='E')
{
i+=4;
s[q++]='0';
continue;
}
if(si[i]=='(')
{
s[q++]='(';
continue;
}
if(si[i]==')')
{
s[q++]=')';
continue;
}
s[q++]=si[i];
}
}
void make_string()
{
for(int i=0;s[i];i++)
{
if(s[i]=='(' || s[i]=='1' || s[i]=='0' || s[i]==')' || s[i]=='|' || s[i]=='&' || s[i]=='!')
{
v[i]=s[i];
continue;
}
v[i]=val[s[i]-'A']+'0';
}
}
bool eval();
bool term();
bool fact()
{
bool semn=1,rc;
if(v[poz]=='!')
{
poz++;
semn=0;
}
if(v[poz]=='(')
{
poz++;
rc=eval();
poz++;
return (semn&&rc);
}
rc=v[poz]-'0';
return (semn&&rc);
}
bool term()
{
bool rc=fact();
while(v[poz]=='&')
{
poz++;
rc=(rc&fact());
}
return rc;
}
bool eval()
{
bool rc=term();
while(v[poz]=='|')
{
poz++;
rc=(rc|term());
}
return rc;
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(si);
edit();
scanf("%d\n",&n);
gets(sch);
for(int i=0;i<n;i++)
{
poz=0;
val[sch[i]-'A']=!val[sch[i]-'A'];
make_string();
printf("%d",eval());
}
return 0;
}