해결한 사람
0
명
정답률
0.00
%
시간 제한
2000
ms
메모리 제한
245
MB
Petya는 새로운 프로그래밍 언어 CALPAS를 배웠다. 이 언어로 작성된 프로그램은 항상 음이 아닌 정수 하나를 입력받고 음이 아닌 정수 하나를 반환한다.
이 언어에는 세 가지 명령만 있다. 현재 정수에 주어진 상수와의 비트 연산 AND, OR, 또는 XOR를 적용한다. 프로그램에는 0부터 1023까지의 임의의 상수를 사용하는 이 연산들을 임의의 순서로 나열할 수 있다. 프로그램을 실행하면 모든 연산이 인자에 주어진 순서대로 적용되고, 마지막에 결과 정수가 반환된다.
Petya는 이 언어로 프로그램을 작성했지만, 너무 길다는 사실을 알게 되었다. Petya의 프로그램과 같은 일을 하면서 최대 5줄로 구성되는 프로그램을 CALPAS로 작성하라. 작성한 프로그램은 0부터 1023까지의 모든 인자에 대해 Petya의 프로그램과 같은 정수를 반환해야 한다.
첫 번째 줄에는 줄의 수를 나타내는 정수 n (1 ≤ n ≤ 5·105)이 주어진다.
다음 n개의 줄에는 명령이 주어진다. 명령은 연산을 나타내는 문자("&", "|", "^"는 각각 AND, OR, XOR를 나타낸다)와 상수 xi 0 ≤ xi ≤ 1023으로 구성된다.
작성한 프로그램의 길이를 나타내는 정수 k (0 ≤ k ≤ 5)을 출력한다.
다음 k개의 줄에는 입력과 같은 형식으로 명령을 출력해야 한다.
3
& 1
& 3
& 5
3
& 0
| 0
^ 0
3
| 3
^ 2
| 1
3
& 1021
| 1
^ 0
3
^ 1
^ 2
^ 3
3
& 1023
| 0
^ 0
비트 연산에 관한 내용은 https://en.wikipedia.org/wiki/Bitwise_operation에서 읽을 수 있다.
두 번째 예제:
x가 Petya의 프로그램에 입력된다고 하자. 그 출력은 ((x&1)&3)&5 = x&(1&3&5) = x&1이다. 따라서 두 프로그램은 항상 같은 출력을 낸다.