셰퍼 스트로크 함수(NAND)만으로 임의의 불 함수를 만들 수 있다는 사실은 잘 알려져 있다. 이 함수의 진리표는 다음과 같다.
| x | y | x|y |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
각각 N개의 비트로 이루어진 두 이진수 A와 B를 더하는 상황을 생각하자. 각 수의 비트에는 최하위 비트인 0번부터 최상위 비트인 N−1번까지 번호가 매겨진다. 두 수의 합 A+B는 항상 N+1개의 비트로 나타낼 수 있으며, 그중 가장 높은 자리 비트(N번 비트)를 오버플로 비트라고 부른다.
셰퍼 스트로크 함수만을 사용하여, 임의의 A, B에 대해 오버플로 비트의 값을 계산하는 논리식을 다음 규칙에 따라 구성하라.
Ai는 수 A의 i번 비트의 값을 나타내는 식이다.Bi는 수 B의 i번 비트의 값을 나타내는 식이다.(x|y)는 두 식 x, y에 대한 셰퍼 스트로크 함수의 결과를 나타내는 식이다.비트 번호 i는 앞에 0을 붙이지 않은 십진수로 적는다. 예를 들어 A의 12번 비트는 A12로 적는다. 식은 규칙 3에 따라 완전히 괄호로 묶여야 하며, 공백이 있어서는 안 된다.
정수 N 하나가 주어진다 (1≤N≤100).
정답은 문자열이 정확히 일치하는지로 채점되므로, 아래에 정의된 표준 식 EN을 공백 없이 한 줄에 출력하라.
비트 번호 i(앞에 0을 붙이지 않은 십진수)에 대해 다음 세 문자열을 정의한다.
notand(i) = (Ai|Bi)and(i) = ((Ai|Bi)|(Ai|Bi))or(i) = ((Ai|Ai)|(Bi|Bi))여기서 Ai, Bi는 각각 문자 A 또는 B 바로 뒤에 십진수 i를 붙인 것이다. 다음과 같이 자리올림 식을 만든다.
and(0)( + notand(k) + |( + Ek + | + or(k) + ))를 이어 붙인 것이다.EN을 출력하라.
참고: 스트로크 기호( | )는 십진수 코드가 124인 아스키 문자이다. 출력의 크기는 50⋅N 바이트를 넘지 않는다.