1
& 0
 1
^ 123
 10
^ 218
& 150
| 935
& 61
| 588
& 897
| 411
| 584
^ 800
| 704
 3
& 1
& 3
& 5
 1
| 123
 1
^ 0
 1
| 1023
 3
& 242
^ 506
^ 522
 10
^ 160
& 1021
& 510
^ 470
& 1022
& 251
& 760
& 1016
| 772
| 515
 1
& 1023
 1
| 0
 2
| 56
^ 875
 1
^ 1023
 2
| 999
^ 689
 3
^ 125
^ 377
& 1019
 1
& 123

3
& 0
| 0
^ 0
 3
& 1023
| 0
^ 123
 3
& 763
| 763
^ 0
 3
& 1
| 0
^ 0
 3
& 1023
| 123
^ 0
 3
& 1023
| 0
^ 0
 3
& 1023
| 1023
^ 0
 3
& 1010
| 768
^ 240
 2
| 775
^ 112
 3
& 1023
| 0
^ 0
 3
& 1023
| 0
^ 0
 3
& 983
| 16
^ 835
 3
& 1023
| 0
^ 1023
 3
& 350
| 326
^ 16
 3
& 1019
| 0
^ 256
 3
& 123
| 0
^ 0

#include <bits/stdc++.h>
using namespace std;
void imprimirVector(vector<long long> v) {
  if (!v.empty()) {
    long long p = long long(v.size());
    cout << "[";
    for (long long i = 0; i < (long long)(p - 1); i++) cout << v[i] << ",";
    cout << v[p - 1] << "]" << endl;
  } else
    cout << "[]" << endl;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  long long n;
  while (cin >> n) {
    vector<long long> andList, orList, xorList;
    long long andMask = 1023, orMask = 0, xorMask = 0;
    long long y = 0, z = 1023;
    for (long long i = 0; i < (long long)(n); i++) {
      char t;
      long long x;
      cin >> t >> x;
      if (t == '|') {
        y |= x;
        z |= x;
      } else if (t == '&') {
        y &= x;
        z &= x;
      } else {
        y ^= x;
        z ^= x;
      }
    }
    for (long long k = 0; k < (long long)(10); k++) {
      long long cy = y & (1LL << k);
      long long cz = z & (1LL << k);
      if (cy == 0 && cz == 0)
        andList.push_back(k);
      else if (cy == 1 && cz == 1)
        orList.push_back(k);
      else if (cy == 1 && cz == 0)
        xorList.push_back(k);
    }
    for (auto c : andList) andMask -= (1LL << c);
    for (auto c : orList) orMask += (1LL << c);
    for (auto c : xorList) xorMask += (1LL << c);
    cout << "3\n";
    cout << "& " << andMask << "\n";
    cout << "| " << orMask << "\n";
    cout << "^ " << xorMask << "\n";
  }
  return 0;
}
