Petya learned a new programming language CALPAS. A program in this language always takes one non-negative integer and returns one non-negative integer as well.

In the language, there are only three commands: apply a bitwise operation AND, OR or XOR with a given constant to the current integer. A program can contain an arbitrary sequence of these operations with arbitrary constants from 0 to 1023. When the program is run, all operations are applied (in the given order) to the argument and in the end the result integer is returned.

Petya wrote a program in this language, but it turned out to be too long. Write a program in CALPAS that does the same thing as the Petya's program, and consists of no more than 5 lines. Your program should return the same integer as Petya's program for all arguments from 0 to 1023.

Input

The first line contains an integer n (1 ≤ n ≤ 5·105) — the number of lines.

Next n lines contain commands. A command consists of a character that represents the operation ("&", "|" or "^" for AND, OR or XOR respectively), and the constant xi 0 ≤ xi ≤ 1023.

Output

Output an integer k (0 ≤ k ≤ 5) — the length of your program.

Next k lines must contain commands in the same format as in the input.

Examples

Input

3
| 3
^ 2
| 1


Output

2
| 3
^ 2


Input

3
&amp; 1
&amp; 3
&amp; 5


Output

1
&amp; 1


Input

3
^ 1
^ 2
^ 3


Output

0

Note

You can read about bitwise operations in <https://en.wikipedia.org/wiki/Bitwise_operation>.

Second sample:

Let x be an input of the Petya's program. It's output is ((x&1)&3)&5 = x&(1&3&5) = x&1. So these two programs always give the same outputs.
import java.util.Scanner;

public class C {

	public static void main(String[] args) {
		new C();
	}

	Bit num[] = new Bit[10];
	int N = 3;
	int ans[][] = new int[1024][2];
	
	C() {

		Scanner in = new Scanner(System.in);
		N = in.nextInt();
		for(int i=0;i<10;i++) {
			num[i] = new Bit();
		}
		
		for(int i=0;i<1024;i++) {
			ans[i][0] = ans[i][1] = i;
		}
		
		for(int line=0;line<N;line++) {
			char op = in.next().charAt(0);
			int x = in.nextInt();
			switch(op) {
			case '&':
				for(int i=0;i<10;i++) {
					if((x&(1<<i))!=0) { //Great! Bit i is set.
						//preserve state
					}else { //Not great! Bit i is off.
						num[i].state = 0;
					}
				}
//				for(int i=0;i<1024;i++) ans[i][0] &= x;
				break; //berak oboma
			case '|':
				for(int i=0;i<10;i++) {
					if((x&(1<<i))!=0) { //Great! Bit i is set.
						num[i].state = 1;
					}else { //Not great! Bit i is off.
						//preserve state
					}
				}
//				for(int i=0;i<1024;i++) ans[i][0] |= x;
				break;
			case '^':
				for(int i=0;i<10;i++) {
					if((x&(1<<i))!=0) { //Great! Bit i is set.
						num[i].invert();
					}else { //Not great! Bit i is off.
						//preserve state
					}
				}
//				for(int i=0;i<1024;i++) ans[i][0] ^= x;
				break;
			}
		}
		
		System.out.println("3");
		int mask = preserved(num);
		System.out.println("& "+mask);
		int flippity = flipped(num);
		System.out.println("^ "+flippity);
		int lit = literal(num);
		System.out.println("| "+lit);
		
//		for(int i=0;i<1024;i++) {
//			ans[i][1] &= mask;
//			ans[i][1] ^= flippity;
//			ans[i][1] |= lit;
//			if(ans[i][1]!=ans[i][0]) {
//				System.out.printf("Uh-oh, we got a problem up in here! %d didn't match.\n",i);
//				return;
//			}
//		}
		
//		System.out.println("Nice. Your code works.");
		
		in.close();

	}
	
	int preserved(Bit[] num) {
		int ans = 0;
		for(int i=0;i<num.length;i++){
			if(num[i].state==2 || num[i].state==3) {
				ans |= (1<<i);
			}
		}
		return ans;
	}
	
	int flipped(Bit[] num) {
		int ans = 0;
		for(int i=0;i<num.length;i++){
			if(num[i].state==3) {
				ans |= (1<<i);
			}
		}
		return ans;
	}
	
	int literal(Bit[] num) {
		int ans = 0;
		for(int i=0;i<num.length;i++){
			if(num[i].state==1) {
				ans |= (1<<i);
			}
		}
		return ans;
	}
	
	static class Bit{
		/**
		 * 0 = 0
		 * 1 = 1
		 * 2 = preserved
		 * 3 = inverted
		 */
		int state;
		
		public Bit() {
			state = 2;
		}
		
		public void invert() {
			if(state==1)
				state = 0;
			else if(state==0)
				state = 1;
			else if(state==2)
				state = 3;
			else
				state = 2;
		}
	}
	
}
