만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

비트 연산

시간 제한1초메모리 제한512 MB

요약
N개의 (x, y) 쌍이 주어질 때, x, 상수, ~, &, |, ^, +, -, *만으로 이루어진 C 식을 만들어 각 x_i가 y_i로 바뀌게 합니다.
난이도

보통10점 중 6점

유형
비트 연산, 완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

NN개의 정수 쌍 (xi,yi)(x_i, y_i)가 주어진다. 모든 ii에 대해 yi=f(xi)y_i = f(x_i)를 만족하는 함수 ff를 작성하라. ff는 C 언어로 다음 형태로 쓸 수 있어야 한다.

uint32_t f(uint32_t x) {
  return Expression;
}

Expression은 다음 BNF를 만족해야 한다.

<expr> ::= "x"
         | <num>
         | "(~" <expr> ")"
         | "(" <expr> <op2> <expr> ")"
<op2> ::= "&" | "|" | "^" | "+" | "-" | "*"

여기서 은 10진수로 표기한 32비트 부호 없는 정수이다. 0이 아닌 수는 앞에 0을 붙이지 않으며, 0은 00으로 표기한다.

입력

첫째 줄에 정수 NN (1≤N≤81 \le N \le 8)이 주어진다. 다음 NN개의 줄에는 정수 xix_i와 yiy_i (0≤xi,yi<2560 \le x_i, y_i < 256)가 한 줄에 하나씩 주어진다.

출력

조건을 만족하는 식을 출력한다. 출력은 위의 BNF 형식을 정확히 따라야 한다. 공백, 줄바꿈, 괄호 등 추가 문자는 허용되지 않는다. 출력은 10510^5자 이하여야 한다. 주어진 입력에 대해 답이 존재함이 보장된다.

예제2

  1. 예제 1

    입력
    8
    1 1
    2 2
    3 3
    4 0
    5 1
    6 2
    7 3
    8 0
    
    예상 출력
    (x&3)
    
  2. 예제 2

    입력
    8
    1 0
    2 0
    3 2
    4 0
    5 4
    6 4
    7 6
    8 0
    
    예상 출력
    (x&(x-1))