이 문제는 인터랙티브 문제이다.
주어진 양의 정수 $n\le 15$과, $1\le m\le 2n$에 대해서, RUN game이라는 것은 "방어자"가 "공격자"의 공격을 방어하는 컨셉으로 이루어지는 2인용 경쟁 게임이다. 그 진행방식은 다음과 같이 기술된다:
조건: 임의의 $1\le i\le n$에 대해서, $B_x,B_y,B_z$중 적어도 하나는 $i$번째 원소가 $2$이다. 또한, $B_x,B_y,B_z$에 속한 $2$의 개수의 총합이 $m$ 이하여야 한다.
히카리와 타이리츠는 RUN game을 플레이하려고 한다. 이들의 게임은 다음과 같이 진행될 것이다.
일단, 맨 처음 $n,m$이 주어지고 나면 타이리츠는 공격자를 할지 방어자를 할지 결정한다.
타이리츠가 방어자를 하기로 결정했다면, 일반적인 RUN game의 룰대로 타이리츠는 히카리에게 $2^n-1$개의 수열을 제공하고, 히카리는 그중 조건을 만족하지 않는 $x,y,z$를 찾는다.
그러나, 타이리츠가 공격자를 하기로 결정했다면, 타이리츠는 $1$ 이상 $2^n-1$ 이하인 $x$에 대해 히카리에게 다음과 같은 질문을 최대 $20$개 할 수 있다:
? $A_x$: 히카리가 생각한 $B_x$를 반환받는다.최대 $20$번의 질문 이내에 만약 타이리츠가 조건을 만족하지 않는 $x,y,z$를 찾았다면, 타이리츠는 그 이진전개를 선언하고 승리할 수 있다. 만약 $20$번 이내에 이를 찾지 못했다면, 히카리가 승리한다.
타이리츠의 전략을 수행하는 프로그램을 작성하여라.
어떤 정수 $0\le t<2^n$에 대해서, $t$의 길이 $n$의 이진전개라는 것은 길이 $n$의 이진수열 $a_na_{n-1}...a_1$인데, 이때 $a_i$는 $\left\lfloor \frac{t}{2^{i-1}} \right\rfloor$가 홀수라면 $1$이고, 그렇지 않다면 $0$이다. 간단히 말해서, $a_i$는 $t$의 $i$번째 비트이다.
출력 버퍼를 비우는 방법은 다음과 같다.
fflush(stdout)std::cout << std::flushSystem.out.flush()sys.stdout.flush()이외의 언어에 대해서는 언어별 명세를 참고해야 한다.