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

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt();

		char c[][] = new char[n][10];

		for (int i = 0; i < n; i++) {
			String sTemp = sc.next();
			char cTemp = sTemp.charAt(0);
			int numTemp = sc.nextInt();
			for (int digit = 0; digit < 10; digit++) {
				if (numTemp % 2 == 0 && cTemp == '&') {
					c[i][digit] = '&';
				} else if (numTemp % 2 == 1 && cTemp == '|') {
					c[i][digit] = '|';
				} else if (numTemp % 2 == 1 && cTemp == '^') {
					c[i][digit] = '^';
				} else {
					c[i][digit] = '.';
				}
				numTemp /= 2;
			}
		}

		int[][] test = new int[10][2];
		for (int digit = 0; digit < 10; digit++) {
			test[digit][0] = 0;
			test[digit][1] = 1;
		}
		for (int i = 0; i < n; i++) {
			for (int digit = 0; digit < 10; digit++) {
				for (int j = 0; j < 2; j++) {
					if (c[i][digit] == '&' && test[digit][j] == 1) {
						test[digit][j] = 0;
					} else if (c[i][digit] == '|' && test[digit][j] == 0) {
						test[digit][j] = 1;
					} else if (c[i][digit] == '^' && test[digit][j] == 1) {
						test[digit][j] = 0;
					} else if (c[i][digit] == '^' && test[digit][j] == 0) {
						test[digit][j] = 1;
					}
				}
			}
		}

		for (int digit = 0; digit < 10; digit++) {
			// System.out.println(test[digit][0] + " " + test[digit][1]);
		}

		boolean[] and = new boolean[10];
		boolean[] or = new boolean[10];
		boolean[] xor = new boolean[10];
		boolean and1 = false;
		boolean or1 = false;
		boolean xor1 = false;
		for (int digit = 0; digit < 10; digit++) {
			and[digit] = false;
			or[digit] = false;
			xor[digit] = false;
		}

		for (int digit = 0; digit < 10; digit++) {
			if (test[digit][0] == 0 && test[digit][1] == 1) {
				// なにもしない
			} else if (test[digit][0] == 0 && test[digit][1] == 0) {
				and[digit] = true;
				and1 = true;
			} else if (test[digit][0] == 1 && test[digit][1] == 0) {
				xor[digit] = true;
				xor1 = true;
			} else if (test[digit][0] == 1 && test[digit][1] == 1) {
				or[digit] = true;
				or1 = true;
			}
		}

		int num = 1;
		int andNum = 0;
		int orNum = 0;
		int xorNum = 0;
		for (int digit = 0; digit < 10; digit++) {
			if (and1) {
				if (!and[digit]) {
					andNum += num;
				}
			}
			if (or1) {
				if (or[digit]) {
					orNum += num;
				}
			}
			if (xor1) {
				if (xor[digit]) {
					xorNum += num;
				}
			}
			num *= 2;
		}

		if (and1 && or1 && xor1) {
			System.out.println(3);
		} else if (!and1 && or1 && xor1) {
			System.out.println(2);
		} else if (and1 && !or1 && xor1) {
			System.out.println(2);
		} else if (and1 && or1 && !xor1) {
			System.out.println(2);
		} else if (!and1 && !or1 && xor1) {
			System.out.println(1);
		} else if (and1 && !or1 && !xor1) {
			System.out.println(1);
		} else if (!and1 && or1 && !xor1) {
			System.out.println(1);
		} else if (!and1 && !or1 && !xor1) {
			System.out.println(0);
		}

		if (and1) {
			System.out.println('&' + " " + andNum);
		}
		if (or1) {
			System.out.println('|' + " " + orNum);
		}
		if (xor1) {
			System.out.println('^' + " " + xorNum);
		}

	}

}
