#include"stdio.h"
#include"string.h"
//and 1 or 2 not 3 in 4 xor 5
int a[1050000][5];
int sum[1050000];
int dp[1050000];
int dfs(int k) {
int x,y;
if (a[k][0]==4) {sum[k]=a[k][1];return a[k][1];}
if (a[k][0]==3) {
x=dfs(a[k][1]);
sum[k]=x^1;
return (x^1);
}
if (a[k][0]==1) {
x=dfs(a[k][1]);
y=dfs(a[k][2]);
sum[k]=x&y;
return (x&y);
}
if (a[k][0]==2) {
x=dfs(a[k][1]);
y=dfs(a[k][2]);
sum[k]=x|y;
return (x|y);
}
if (a[k][0]==5) {
x=dfs(a[k][1]);
y=dfs(a[k][2]);
sum[k]=x^y;
return (sum[k]);
}
}
//and 1 or 2 not 3 in 4 xor 5
void find(int k){
if (a[k][0]==1) {
if (sum[a[k][1]]==1&&sum[a[k][2]]==1) {
dp[a[k][1]]=1*dp[k];
dp[a[k][2]]=1*dp[k];
}
if (sum[a[k][1]]==1&&sum[a[k][2]]==0) {
dp[a[k][1]]=0*dp[k];
dp[a[k][2]]=1*dp[k];
}
if (sum[a[k][1]]==0&&sum[a[k][2]]==1) {
dp[a[k][1]]=1*dp[k];
dp[a[k][2]]=0*dp[k];
}
if (sum[a[k][1]]==0&&sum[a[k][2]]==0) {
dp[a[k][1]]=0*dp[k];
dp[a[k][2]]=0*dp[k];
}
find(a[k][1]);
find(a[k][2]);
}
if(a[k][0]==2) {
if (sum[a[k][1]]==1&&sum[a[k][2]]==1) {
dp[a[k][1]]=0*dp[k];
dp[a[k][2]]=0*dp[k];
}
if (sum[a[k][1]]==1&&sum[a[k][2]]==0) {
dp[a[k][1]]=1*dp[k];
dp[a[k][2]]=0*dp[k];
}
if (sum[a[k][1]]==0&&sum[a[k][2]]==1) {
dp[a[k][1]]=0*dp[k];
dp[a[k][2]]=1*dp[k];
}
if (sum[a[k][1]]==0&&sum[a[k][2]]==0) {
dp[a[k][1]]=1*dp[k];
dp[a[k][2]]=1*dp[k];
}
find(a[k][1]);
find(a[k][2]);
}
if (a[k][0]==3) {
dp[a[k][1]]=1*dp[k];
find(a[k][1]);
}
if (a[k][0]==5) {
dp[a[k][1]]=1*dp[k];
dp[a[k][2]]=1*dp[k];
find(a[k][1]);
find(a[k][2]);
}
}
int pp[1050000];
char s[105000];
int main(){
int n,i,l;
scanf("%d",&n);
l=0;
for (i=1;i<=n;i++){
scanf("%s",s);
if (s[0]=='A') {
a[i][0]=1;
scanf("%d %d",&a[i][1],&a[i][2]);
}
if (s[0]=='O') {
a[i][0]=2;
scanf("%d %d",&a[i][1],&a[i][2]);
}
if (s[0]=='N') {
a[i][0]=3;
scanf("%d",&a[i][1]);
}
if (s[0]=='I') {
a[i][0]=4;
scanf("%d",&a[i][1]);
l++;
pp[l]=i;
}
if (s[0]=='X') {
a[i][0]=5;
scanf("%d %d",&a[i][1],&a[i][2]);
}
}
memset(sum,0,sizeof(sum));
dfs(1);
memset(dp,0,sizeof(dp));
dp[1]=1;
find(1);
for (i=1;i<=l;i++) {
printf("%d",dp[pp[i]]^sum[1]);
}
printf("\n");
}