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.io.*;
import java.util.*;
import java.lang.*;

public class Main {

    static StreamTokenizer st;
    static PrintWriter out;

    static int[] bits;

    public static void main(String[] args) throws IOException {
        st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        out = new PrintWriter(System.out);
        bits = new int[10];
        Arrays.fill(bits, -1);
        st.ordinaryChar('|');
        st.ordinaryChar('&');
        st.ordinaryChar('^');
        int n = ri();
        while (n-- > 0) {
            char c = (char) st.nextToken();
            int x = ri();
            char[] xa = toArr(x);
            switch (c) {
                case '^': doXor(xa); break;
                case '&': doAnd(xa); break;
                case '|': doOr(xa);
            }
        }
        ArrayList<String> output = new ArrayList();
        int xor = 0;
        for (int i = 0; i < 10; ++i)
            if (bits[i] == -2)
                xor |= (1 << (10 - i - 1));
        if (xor != 0)
            output.add("^ " + xor);

        int and = 1023;
        for (int i = 0; i < 10; ++i)
            if (bits[i] == 0)
                and ^= (1 << (10 - i - 1));
        if (and != 1023)
            output.add("& " + and);

        int or = 0;
        for (int i = 0; i < 10; ++i)
            if (bits[i] == 1)
                or |= (1 << (10 - i - 1));
        if (or != 0)
            output.add("| " + or);

        out.println(output.size());
        for (String s : output)
            out.println(s);
        out.close();
    }

    static void doAnd(char[] l) {
        for (int i = 0; i < 10; ++i)
            if (l[i] == '0')
                bits[i] = 0;
    }

    static void doOr(char[] l) {
        for (int i = 0; i < 10; ++i)
            if (l[i] == '1')
                bits[i] = 1;
    }

    static void doXor(char[] l) {
        for (int i = 0; i < 10; ++i)
            if (l[i] == '1')
                if (bits[i] == -1) bits[i] = -2;
                else if (bits[i] == -2) bits[i] = -1;
                else bits[i] = (bits[i] + 1) % 2;
    }


    static char[] toArr(int i) {
        return String.format("%10s", Integer.toBinaryString(i)).replace(" ", "0").toCharArray();
    }

    static String rs() throws IOException {
        st.nextToken();
        return st.sval;
    }

    static long rl() throws IOException {
        st.nextToken();
        return (long) st.nval;
    }

    static int ri() throws IOException {
        st.nextToken();
        return (int) st.nval;
    }
}