#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int val[30];
char sirinit[1005], x[1000][5], nr=0,n, a[5], q=0;
void formaresubsir()
{
for (int i=0; i<=n; i++)
{
if (sirinit[i]==' ')
{
if (strlen(a))
strcpy(x[nr++],a);
memset(a,0,5);
q=0;
continue;
}
else if (sirinit[i]=='(')
{
if (strlen(a))
{
strcpy(x[nr++],a);
}
memset(a,0,5);
strcpy(x[nr++],"(");
q=0;
continue;
}
else if (sirinit[i]==')')
{
if (strlen(a))
{
strcpy(x[nr++],a);
}
memset(a,0,5);
strcpy(x[nr++],")");
q=0;
continue;
}
else
{
a[q++]=sirinit[i];
}
}
}
void verifparanteze(int &st, int &dr)
{
int nr1=0, ok=1;
while (strcmp(x[st],"(")==0 && strcmp(x[dr],")")==0 && nr1==0 && ok==1)
{
nr1=0;
for (int i=st+1; i<=dr-1 && ok==1; i++)
{
if (strcmp(x[i],")")==0)
nr1--;
else if (strcmp(x[i],"(")==0)
nr1++;
if (nr<0)
ok=0;
}
if (nr==0 && ok==1)
st++,dr--;
}
}
int cautare(char de[5],int st, int dr)
{
int nr1=0;
for (int i=dr; i>=st; i--)
{
if (strcmp(x[i],")")==0)
nr1--;
else if (strcmp(x[i],"(")==0)
nr1++;
if ((strcmp(x[i],de)==0)&& nr1==0)
return i;
}
return -1;
}
int valoare(int st)
{
char car=x[st][0];
return val[car-65];
}
bool eval(int st, int dr)
{
if (st>dr)
return false;
verifparanteze(st,dr);
int p=cautare("OR",st,dr);
if (p==-1)
{
p=cautare("AND",st,dr);
if (p==-1)
{
p=cautare("NOT",st,dr);
if (p==-1)
return valoare(st);
}
}
int v1=eval(st,p-1);
int v2=eval(p+1,dr);
if (strcmp(x[p],"OR")==0)
{
return (v1||v2);
}
if (strcmp(x[p],"AND")==0)
return (v1&&v2);
if (strcmp(x[p],"AND")==0)
return (!v2);
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);;
fgets(sirinit,1000,stdin);
n=strlen(sirinit);
if (sirinit[n-1]=='\n')
{
sirinit[n-1]='\0';
n--;
}
formaresubsir();
cout << eval(0,nr-1);
return 0;
}