#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int maxn = 1e6 + 50;
int ty[maxn], val[maxn], ou[maxn];
bool can[maxn];
int son[maxn][2];
void dfs_out(int pos) {
  if (!ty[pos]) {
    ou[pos] = val[pos];
  } else {
    if (ty[pos] == 1) {
      dfs_out(son[pos][0]);
      dfs_out(son[pos][1]);
      ou[pos] = (ou[son[pos][0]] & ou[son[pos][1]]);
    } else if (ty[pos] == 2) {
      dfs_out(son[pos][0]);
      dfs_out(son[pos][1]);
      ou[pos] = ou[son[pos][0]] | ou[son[pos][1]];
    } else if (ty[pos] == 3) {
      dfs_out(son[pos][0]);
      dfs_out(son[pos][1]);
      ou[pos] = ou[son[pos][0]] ^ ou[son[pos][1]];
    } else {
      dfs_out(son[pos][0]);
      ou[pos] = ou[son[pos][0]] ^ 1;
    }
  }
}
void dfs_ans(int pos) {
  if (!ty[pos]) {
    can[pos] = true;
  } else {
    if (ty[pos] == 1) {
      if (ou[pos] == 1) {
        dfs_ans(son[pos][0]);
        dfs_ans(son[pos][1]);
      } else {
        int d = ou[son[pos][0]] + ou[son[pos][1]];
        if (d == 1) {
          if (!ou[son[pos][0]]) dfs_ans(son[pos][0]);
          if (!ou[son[pos][1]]) dfs_ans(son[pos][1]);
        }
      }
    } else if (ty[pos] == 2) {
      int d = ou[son[pos][0]] + ou[son[pos][1]];
      if (d == 0) {
        dfs_ans(son[pos][0]);
        dfs_ans(son[pos][1]);
      } else {
        if (d == 1) {
          if (ou[son[pos][0]]) dfs_ans(son[pos][0]);
          if (ou[son[pos][1]]) dfs_ans(son[pos][1]);
        }
      }
    } else if (ty[pos] == 3) {
      dfs_ans(son[pos][0]);
      dfs_ans(son[pos][1]);
    } else if (ty[pos] == 4) {
      dfs_ans(son[pos][0]);
    }
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    string s;
    cin >> s;
    if (s == "AND") {
      cin >> son[i][0] >> son[i][1];
      ty[i] = 1;
    } else if (s == "OR") {
      cin >> son[i][0] >> son[i][1];
      ty[i] = 2;
    } else if (s == "XOR") {
      cin >> son[i][0] >> son[i][1];
      ty[i] = 3;
    } else if (s == "NOT") {
      cin >> son[i][0];
      ty[i] = 4;
    } else {
      cin >> val[i];
      ty[i] = 0;
    }
  }
  dfs_out(1);
  int gg = ou[1];
  dfs_ans(1);
  for (int i = 1; i <= n; ++i)
    if (!ty[i]) {
      if (can[i])
        cout << (gg ^ 1);
      else
        cout << gg;
    }
  return 0;
}
