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

from sys import stdin

rstrs = lambda: [str(x) for x in stdin.readline().split()]
rstrs_2d = lambda n: [rstrs() for _ in range(n)]
get_bit = lambda x, i: (x >> i) & 1

n = int(input())
a, out = rstrs_2d(n), [['|', ['0'] * 10], ['^', ['0'] * 10], ['&', ['1'] * 10]]

for i in range(10):
    all = []
    for j in range(2):
        cur = j
        for op, num in a:
            if op == '|':
                cur |= get_bit(int(num), i)
            elif op == '&':
                cur &= get_bit(int(num), i)
            else:
                cur ^= get_bit(int(num), i)
        all.append(cur)

    if all[0] == all[1]:
        if all[0]:
            out[0][1][-i - 1] = '1'
        else:
            out[2][1][-i - 1] = '0'
    elif all[0] == 1 and all[1] == 0:
        out[1][1][-i - 1] = '1'
# print(out)
print(3)
for i, j in out:
    print('%s %d' % (i, int(''.join(j), 2)))
