#include <bits/stdc++.h>
using namespace std;
struct nodo {
  string t;
  int l, r;
};
int N;
nodo a[2000005];
int ori[2000005];
int ans[2000005];
void llena(int x, int v) {
  if (!x) return;
  if (a[x].t == "IN") {
    ans[x] = v;
    return;
  }
  llena(a[x].l, v);
  llena(a[x].r, v);
}
void dfs2(int x, int v) {
  if (a[x].t == "IN") {
    if (a[x].l != v)
      ans[x] = 1;
    else
      ans[x] = 0;
    return;
  }
  if (a[x].t == "OR") {
    if (v == 1) {
      if (ori[a[x].l])
        llena(a[x].r, 1);
      else
        dfs2(a[x].r, 1);
      if (ori[a[x].r])
        llena(a[x].l, 1);
      else
        dfs2(a[x].l, 1);
    } else {
      if (ori[a[x].l])
        llena(a[x].r, 0);
      else
        dfs2(a[x].r, 0);
      if (ori[a[x].r])
        llena(a[x].l, 0);
      else
        dfs2(a[x].l, 0);
    }
  } else if (a[x].t == "XOR") {
    if (v == 1) {
      dfs2(a[x].l, !ori[a[x].r]);
      dfs2(a[x].r, !ori[a[x].l]);
    } else {
      dfs2(a[x].l, ori[a[x].r]);
      dfs2(a[x].r, ori[a[x].l]);
    }
  } else if (a[x].t == "AND") {
    if (v == 1) {
      if (!ori[a[x].l])
        llena(a[x].r, 0);
      else
        dfs2(a[x].r, 1);
      if (!ori[a[x].r])
        llena(a[x].l, 0);
      else
        dfs2(a[x].l, 1);
    } else {
      if (ori[a[x].l])
        dfs2(a[x].r, 0);
      else
        llena(a[x].r, 1);
      if (ori[a[x].r])
        dfs2(a[x].l, 0);
      else
        llena(a[x].l, 1);
    }
  } else if (a[x].t == "NOT")
    dfs2(a[x].l, !v);
}
void dfs(int x) {
  if (a[x].t == "IN") {
    ori[x] = a[x].l;
    return;
  }
  if (a[x].t == "NOT") {
    dfs(a[x].l);
    ori[x] = !ori[a[x].l];
  } else {
    dfs(a[x].l);
    dfs(a[x].r);
    if (a[x].t == "XOR") ori[x] = (ori[a[x].l] ^ ori[a[x].r]);
    if (a[x].t == "AND") ori[x] = (ori[a[x].l] & ori[a[x].r]);
    if (a[x].t == "OR") ori[x] = (ori[a[x].l] | ori[a[x].r]);
  }
}
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  cin >> N;
  for (int i = 1; i <= N; i++) {
    cin >> a[i].t;
    if (a[i].t == "IN" or a[i].t == "NOT")
      cin >> a[i].l;
    else
      cin >> a[i].l >> a[i].r;
  }
  dfs(1);
  dfs2(1, 1);
  for (int i = 2; i <= N; i++)
    if (a[i].t == "IN") cout << ans[i];
  return 0;
}
