#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
bool ckmin(T &a, U b) {
  return b < a ? a = b, true : false;
}
template <typename T, typename U>
bool ckmax(T &a, U b) {
  return b > a ? a = b, true : false;
}
int n;
map<char, int> m;
vector<vector<int>> ans;
vector<pair<char, int>> op;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  for (int i = 0; i < n; ++i) {
    char x;
    int y;
    cin >> x >> y;
    op.push_back({x, y});
  }
  m['&'] = 1023;
  for (int i = 0; i < 10; ++i) {
    int cur = (1 << i), res = 0;
    for (int j = 0; j < n; ++j) {
      if (op[j].first == '|') cur |= op[j].second;
      if (op[j].first == '&') cur &= op[j].second;
      if (op[j].first == '^') cur ^= op[j].second;
    }
    res |= (cur >> i & 1);
    res <<= 1;
    cur = 0;
    for (int j = 0; j < n; ++j) {
      if (op[j].first == '|') cur |= op[j].second;
      if (op[j].first == '&') cur &= op[j].second;
      if (op[j].first == '^') cur ^= op[j].second;
    }
    res |= (cur >> i & 1);
    if (res == 3) m['|'] |= (1 << i);
    if (res == 0) m['&'] ^= (1 << i);
    if (res == 1) m['^'] |= (1 << i);
  }
  cout << (int)(m).size() << "\n";
  for (auto i : m) cout << i.first << " " << i.second << "\n";
  return 0;
}
