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.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;

public class C {

	public static void main(String[] args) throws IOException {
		Scanner sc=new Scanner(System.in);
		PrintWriter pw=new PrintWriter(System.out);
		int n=sc.nextInt();
		int  []bits=new int [11];
		Arrays.fill(bits, -1);
		
		ArrayList<Integer> values=new ArrayList();
		int last=0;
		int value=0;
		int x=6;
		while(n-->0)
		{
			char op=sc.next().charAt(0);
			int v=sc.nextInt();
			if(op=='|')
			{
				for(int i=0;i<11;i++)
				{
					if((v&1<<i)!=0)
						bits[i]=1;
				}
				x|=v;
			}
			else if(op=='&')
			{
				for(int i=0;i<11;i++)
				if((v&1<<i)==0)
					bits[i]=0;
				x&=v;
			}
			else
			{
				for(int i=0;i<11;i++)
					if((v&1<<i)!=0)
					{
						if(bits[i]==0)
							bits[i]=1;
						else if (bits[i]==1)
							bits[i]=0;
						else bits[i]--;
					}
				last=n;
				value=v;
				x^=v;
			}
			
		}
		int ans=0;
		
			
		int []pow=new int [11];pow[0]=1;
		for(int i=1;i<11;i++)
			pow[i]=2*pow[i-1];
		int XOR=0;
		int And=0;
		for(int i=0;i<10;i++)
		{	
			if(bits[i]==1)
				ans+=pow[i];
			else if(bits[i]<0)
			{
				int s=-bits[i];
				if(s%2==0)
					XOR+=pow[i];
			}
			else if(bits[i]==0)
			{
				And+=pow[i];
			}
				
		}	
		
		
		
		{
			pw.println(3);
			pw.printf("& %d\n",And);
			pw.printf("| %d\n",ans);
			pw.printf("^ %d\n",XOR);
		}
		
		pw.close();
	}
	
	
	
}
class Scanner 
{
	StringTokenizer st;
	BufferedReader br;

	public Scanner(InputStream s){	br = new BufferedReader(new InputStreamReader(s));}

	public String next() throws IOException 
	{
		while (st == null || !st.hasMoreTokens()) 
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	}

	public int nextInt() throws IOException {return Integer.parseInt(next());}
	
	public long nextLong() throws IOException {return Long.parseLong(next());}

	public String nextLine() throws IOException {return br.readLine();}
	
	public double nextDouble() throws IOException
	{
		String x = next();
		StringBuilder sb = new StringBuilder("0");
		double res = 0, f = 1;
		boolean dec = false, neg = false;
		int start = 0;
		if(x.charAt(0) == '-')
		{
			neg = true;
			start++;
		}
		for(int i = start; i < x.length(); i++)
			if(x.charAt(i) == '.')
			{
				res = Long.parseLong(sb.toString());
				sb = new StringBuilder("0");
				dec = true;
			}
			else
			{
				sb.append(x.charAt(i));
				if(dec)
					f *= 10;
			}
		res += Long.parseLong(sb.toString()) / f;
		return res * (neg?-1:1);
	}
	
	public boolean ready() throws IOException {return br.ready();}


}
