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.
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 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.
3
| 3
^ 2
| 1
2
| 3
^ 2
3
& 1
& 3
& 5
1
& 1
3
^ 1
^ 2
^ 3
0
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.
(这是一道好题啊
题意:给一定的步骤,求一个满足同样功能的步骤(步骤数小于5,不需要从原步骤里选
解题思路:先取两个典型的例子0和1023,按照input的步骤进行下去,分别得到答案a和b,然后按位分析如何由0和1023到a和b
按位分析:
0->0 1->0 先&0再^0
0->0 1->1 先&1再^0
0->1 1->0 先&1再^1
0->1 1->1 先&0再^1
对每一位进行上述的四种情况分析就行啦。
ac代码:

1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 using namespace std; 5 int x=0,y=1023; 6 int fun(int u,int i) { 7 if(u&(1<<i)) return 1; 8 return 0; 9 } 10 int main() { 11 ios::sync_with_stdio(false); 12 cin.tie(0);cout.tie(0); 13 int n,a; 14 cin>>n; 15 string s; 16 for(int i=0;i<n;++i) { 17 cin>>s>>a; 18 if(s[0]=='|') {x|=a; y|=a;} 19 if(s[0]=='^') {x^=a; y^=a;} 20 if(s[0]=='&') {x&=a; y&=a;} 21 22 } 23 int i=0,v1=0,v2=0; 24 while(i<=10) { 25 if(!fun(x,i) && fun(y,i)) v1+=(1<<i); 26 if(fun(x,i) && fun(y,i)) v2+=(1<<i); 27 if(fun(x,i) && !fun(y,i)) { 28 v1+=(1<<i); 29 v2+=(1<<i); 30 } 31 ++i; 32 } 33 cout<<2<<endl<<"& "<<v1<<endl<<"^ "<<v2<<endl; 34 return 0; 35 }