Cod sursa(job #625338)
#include<stdio.h>
char a[1001],m[101],b[1001];
int nrc,val[27],p;
int factor();
int expresie();
int termen() {
int semn = 1;
while(b[p]==12)
{
semn = 1 - semn;
p++;
}
if(b[p] == '(') {
++p;
int r = expresie()-semn;
++p;
return r;
}
if(b[p]>='A' && b[p]<='Z')
return val[b[p]-'A'];
return b[p];
}
int expresie() {
int rez,r1;
rez=factor(); ++p;
while(b[p]==13) {
++p;
rez|=factor();
}
return rez;
}
int factor() {
int rez,r1;
rez=termen();
while(b[p]==11) {
++p;
rez&=termen();
}
return rez;
}
void pars() {
int i;
for(i=0;a[i]!=0;++i) {
if(a[i]=='A' && a[i+1]=='N') {
b[p++]=11;
i+=2;
continue;
}
if(a[i]=='N' && a[i+1]=='O') {
b[p++]=12;
i+=2;
continue;
}
if(a[i]=='O' && a[i+1]=='R') {
b[p++]=13;
i+=2;
continue;
}
if(a[i]=='T' && a[i+1]=='R') {
b[p++]=1;
i+=3;
continue;
}
if(a[i]=='F' && a[i+1]=='A') {
b[p++]=0;
i+=4;
continue;
}
if((a[i]>='A' && a[i]<='Z') || (a[i]=='(' || a[i]==')'))
b[p++]=a[i];
}
}
int main() {
int i;
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(a);
scanf("%d\n",&nrc);
scanf("%s",m);
pars();
p=0;
for(i=0;i!=nrc;++i) {
val[m[i]-'A']=1-val[m[i]-'A'];
printf("%d",expresie());
}
return 0;
}