#include <bits/stdc++.h>
using namespace std;
char op[1000000];
int var[1000000];
int pos[729];
int main() {
  int x = 0;
  int y = 1023;
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf(" %c %d", &op[i], &var[i]);
    if (op[i] == '&') {
      x &= var[i];
      y &= var[i];
    } else if (op[i] == '|') {
      x |= var[i];
      y |= var[i];
    } else {
      x ^= var[i];
      y ^= var[i];
    }
  }
  memset(pos, -1, sizeof(pos));
  for (int i = 0; i < 729; i++) {
    bool foundall = true;
    vector<int> ans;
    for (int ori = 0; ori < 10; ori++) {
      bool found = false;
      for (int j = 0; j < 32; j++) {
        int ops = i;
        int one = 1;
        int zero = 0;
        for (int c = 0; c < 5; c++) {
          int cbit = ((j >> c) & 1);
          if (ops % 3 == 0) {
            one &= cbit;
            zero &= cbit;
          } else if (ops % 3 == 1) {
            one |= cbit;
            zero |= cbit;
          } else {
            one ^= cbit;
            zero ^= cbit;
          }
          ops /= 3;
        }
        if (((x >> ori) & 1) == zero && ((y >> ori) & 1) == one) {
          ans.push_back(j);
          found = true;
          break;
        }
      }
      if (found == false) {
        foundall = false;
        break;
      }
    }
    if (foundall) {
      cout << 5 << endl;
      int ops = i;
      string opc = "&|^";
      for (int j = 0; j < 5; j++) {
        int cnum = 0;
        for (int c = 0; c < 10; c++) {
          cnum |= (((ans[c] >> j) & 1) << c);
        }
        printf("%c %d\n", opc[ops % 3], cnum);
        ops /= 3;
      }
      return 0;
    }
  }
  return 0;
}
