# 중간

## 문제

이 문제는 인터랙티브 문제다.

국렬이는 1 이상 109 이하의 N개의 자연수로 이루어진 두 배열 A, B를 가지고 있다. 당신은 A, B를 합쳤을 때 중간값을 구해야 한다. 중간값은 2 N개 수들을 오름차순으로 정렬했을 때 N번째 수를 중간값이라고 한다.

국렬이는 인성이 나빠서 배열 A, B를 당신에게 제공하지 않을 것이다. 그래도 약간의 자비가 있기에 특정 배열의 x번째 수가 무엇인지 물어볼 기회를 줬다. 다만 40번까지 질문이 가능하며, 그 이상으로 질문할 경우 국렬이는 틀렸습니다로 당신을 때릴 것이다. 답을 출력하는 것은 질문 횟수에 포함되지 않는다.

40번 이하로 질문해서 중간값을 구해보자.

## 입력

입력의 첫 줄에 배열의 길이 N이 주어진다. N은 2 k으로 표현할 수 있는 양의 정수만 주어진다. (0≤k≤19)

## 출력

다음 중 하나를 표준 출력 스트림(stdout)으로 한 줄에 출력하여, 배열의 원소를 질문 할 수 있다.

- `? A x` : 배열 A의 x번째 수 (1≤x≤N)
- `? B x` : 배열 B의 x번째 수 (1≤x≤N)

어떤 배열에서 x번째 수는, 그 배열을 오름차순으로 정렬했을 때 x번째인 수를 의미한다

각 질문을 출력한 후에는 반드시 표준 출력 버퍼를 flush해 주어야 하고, 표준 입력 스트림(stdin)을 통해 질문에 대한 답을 입력받아야 한다. 질문에 대한 답을 입력받지 않으면 런타임에러를 받게 된다. 최대 질문 횟수는 40번으로, 그 이상으로 질문을 요청한 경우 틀렸습니다!를 받는다.

만약 중간값을 알아낸 경우, 표준 출력 스트림으로 다음을 한 줄에 출력한다.

- `! x` : 배열 A, B를 합쳤을 때의 중앙값은 x이다.

그 후 반드시 표준 출력 버퍼를 flush해야 하고, 프로그램을 종료한다. 이것은 질문 횟수에 포함되지 않는다.

언어별로 표준 출력 버퍼를 flush하는 방법은 다음과 같다.

- C: `fflush(stdout)`
- C++: `std::cout << std::flush`
- Java: `System.out.flush()`
- Python: `sys.stdout.flush()`

## 예제 입력 1 복사

    2

    1

    2

    2

    3

## 예제 출력 1 복사

    ? A 1

    ? A 2

    ? B 1

    ? B 2

    ! 2