#include <bits/stdc++.h>
using namespace std;
struct node {
  string node_type;
  int child1, child2;
  bool is_sensitive;
  bool value;
};
node node_arr[1000001];
int get_type(string operatore) {
  if (operatore == "AND")
    return 1;
  else if (operatore == "OR")
    return 2;
  else if (operatore == "XOR")
    return 3;
  else if (operatore == "NOT")
    return 4;
  else if (operatore == "IN")
    return 5;
}
void find_value(int node_num) {
  string current_operatore = node_arr[node_num].node_type;
  int child1 = node_arr[node_num].child1, child2 = node_arr[node_num].child2;
  if (current_operatore == "IN") {
    return;
  } else {
    if (current_operatore == "NOT") {
      find_value(child1);
      node_arr[node_num].value = !(node_arr[child1].value);
      node_arr[child1].is_sensitive = 1 && node_arr[node_num].is_sensitive;
    } else {
      find_value(child1);
      find_value(child2);
      if (current_operatore == "AND") {
        node_arr[node_num].value =
            node_arr[child1].value && node_arr[child2].value;
        if (node_arr[child1].value == 1 && node_arr[child2].value == 1) {
          node_arr[child1].is_sensitive = 1 && node_arr[node_num].is_sensitive;
          node_arr[child2].is_sensitive = 1 && node_arr[node_num].is_sensitive;
        } else if (node_arr[child1].value == 0 && node_arr[child2].value == 0) {
          node_arr[child1].is_sensitive = 0;
          node_arr[child2].is_sensitive = 0;
        } else {
          if (node_arr[child1].value == 0) {
            node_arr[child1].is_sensitive =
                1 && node_arr[node_num].is_sensitive;
            node_arr[child2].is_sensitive = 0;
          } else {
            node_arr[child2].is_sensitive =
                1 && node_arr[node_num].is_sensitive;
            node_arr[child1].is_sensitive = 0;
          }
        }
      } else if (current_operatore == "OR") {
        node_arr[node_num].value =
            node_arr[child1].value || node_arr[child2].value;
        if (node_arr[child1].value == 1 && node_arr[child2].value == 1) {
          node_arr[child1].is_sensitive = 0;
          node_arr[child2].is_sensitive = 0;
        } else if ((node_arr[child1].value == 0) &&
                   (node_arr[child2].value == 0)) {
          node_arr[child1].is_sensitive = 1 && node_arr[node_num].is_sensitive;
          node_arr[child2].is_sensitive = 1 && node_arr[node_num].is_sensitive;
        } else {
          if (node_arr[child1].value == 0) {
            node_arr[child1].is_sensitive = 0;
            node_arr[child2].is_sensitive =
                1 && node_arr[node_num].is_sensitive;
          } else {
            node_arr[child2].is_sensitive = 0;
            node_arr[child1].is_sensitive =
                1 && node_arr[node_num].is_sensitive;
          }
        }
      } else {
        node_arr[node_num].value =
            (node_arr[child1].value && !node_arr[child2].value) ||
            (!node_arr[child1].value && node_arr[child2].value);
        node_arr[child1].is_sensitive = 1 && node_arr[node_num].is_sensitive;
        node_arr[child2].is_sensitive = 1 && node_arr[node_num].is_sensitive;
      }
    }
    return;
  }
}
void find_value1(int node_num) {
  string current_operatore = node_arr[node_num].node_type;
  int child1 = node_arr[node_num].child1, child2 = node_arr[node_num].child2;
  if (current_operatore == "IN") {
    return;
  } else {
    if (current_operatore == "NOT") {
      node_arr[node_num].value = !(node_arr[child1].value);
      node_arr[child1].is_sensitive = 1 && node_arr[node_num].is_sensitive;
      find_value1(child1);
    } else {
      if (current_operatore == "AND") {
        node_arr[node_num].value =
            node_arr[child1].value && node_arr[child2].value;
        if (node_arr[child1].value == 1 && node_arr[child2].value == 1) {
          node_arr[child1].is_sensitive = 1 && node_arr[node_num].is_sensitive;
          node_arr[child2].is_sensitive = 1 && node_arr[node_num].is_sensitive;
        } else if (node_arr[child1].value == 0 && node_arr[child2].value == 0) {
          node_arr[child1].is_sensitive = 0;
          node_arr[child2].is_sensitive = 0;
        } else {
          if (node_arr[child1].value == 0) {
            node_arr[child1].is_sensitive =
                1 && node_arr[node_num].is_sensitive;
            node_arr[child2].is_sensitive = 0;
          } else {
            node_arr[child2].is_sensitive =
                1 && node_arr[node_num].is_sensitive;
            node_arr[child1].is_sensitive = 0;
          }
        }
      } else if (current_operatore == "OR") {
        node_arr[node_num].value =
            node_arr[child1].value || node_arr[child2].value;
        if (node_arr[child1].value == 1 && node_arr[child2].value == 1) {
          node_arr[child1].is_sensitive = 0;
          node_arr[child2].is_sensitive = 0;
        } else if ((node_arr[child1].value == 0) &&
                   (node_arr[child2].value == 0)) {
          node_arr[child1].is_sensitive = 1 && node_arr[node_num].is_sensitive;
          node_arr[child2].is_sensitive = 1 && node_arr[node_num].is_sensitive;
        } else {
          if (node_arr[child1].value == 0) {
            node_arr[child1].is_sensitive = 0;
            node_arr[child2].is_sensitive =
                1 && node_arr[node_num].is_sensitive;
          } else {
            node_arr[child2].is_sensitive = 0;
            node_arr[child1].is_sensitive =
                1 && node_arr[node_num].is_sensitive;
          }
        }
      } else {
        node_arr[node_num].value =
            (node_arr[child1].value && !node_arr[child2].value) ||
            (!node_arr[child1].value && node_arr[child2].value);
        node_arr[child1].is_sensitive = 1 && node_arr[node_num].is_sensitive;
        node_arr[child2].is_sensitive = 1 && node_arr[node_num].is_sensitive;
      }
      find_value1(child1);
      find_value1(child2);
    }
    return;
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    string operatore;
    cin >> operatore;
    node_arr[i].node_type = operatore;
    if (operatore == "IN") {
      bool value;
      cin >> value;
      node_arr[i].value = value;
    } else {
      int child1;
      cin >> child1;
      node_arr[i].child1 = child1;
      if (operatore == "NOT") {
        node_arr[i].child2 = -1;
      } else {
        int child2;
        cin >> child2;
        node_arr[i].child2 = child2;
      }
    }
  }
  node_arr[1].is_sensitive = 1;
  find_value(1);
  find_value1(1);
  for (int i = 1; i <= n; i++) {
    if (node_arr[i].node_type == "IN") {
      cout << (node_arr[i].is_sensitive != node_arr[1].value) << "";
    }
  }
  cout << endl;
  return 0;
}
