Welcome Contest (京都・オープン) 2026/03/26 14:00 ~ 2026/03/26 18:00 4:00:00.000

H Find Pair

問題
制限時間: 2 sec メモリ制限: 1024 MB
Find Pair
Statement

この問題は インタラクティブな問題(あなたの作成したプログラムとジャッジシステムが入出力を介して対話を行う形式の問題)です。

正整数 \(N\) が与えられます。\(\\ \) ジャッジシステムが長さ \(2N\) の正整数列 \(A = (A_1, A_2, \dots, A_{2N})\) を隠し持っています。\(\\ \) \(A\) は \(1,2,\dots,N\) をそれぞれちょうど \(2\) 個ずつ含みます。

あなたは以下の質問を \(20\) 回まで行うことが出来ます。

  • 正整数 \(l,r~(1\leq l \leq r \leq 2N)\) を指定し、\(A_l, A_{l+1}, \dots, A_r\) に現れる相異なる値の個数を聞く。

\(A_x = A_y~(1 \leq x \lt y \leq 2N)\) であるような正整数 \(x, y\) を \(1\) つ特定してください。

\(1\) つの入力につき、\(T\) 個のテストケースが与えられます。

Interaction

この問題は インタラクティブな問題(あなたの作成したプログラムとジャッジシステムが入出力を介して対話を行う形式の問題)です。

最初にテストケース数 \(T\) を標準入力から以下の形式で受け取ってください。

\(T\)
ここで、\(T\) は \(1\) 以上 \(500\) 以下の整数です。

その後、各テストケースについて、以下に示す入出力を行ってください。

各テストケースについて、\(N\) を標準入力から以下の形式で受け取ってください。

\(N\)
ここで、\(N\) は \(1\) 以上 \(1000\) 以下の整数です。

\(A_x = A_y~(1 \leq x \lt y \leq 2N)\) であるような正整数 \((x, y)\) を \(1\) つ特定できるまで質問を繰り返してください。質問は、以下の形式で標準出力に出力してください。

? \(l~r\)
ここで、\(l,r\) は \(1 \leq l \leq r \leq 2N\) を満たす整数である必要があります。

これに対する応答は、以下の形式で標準入力から与えられます。

\(K\)
ここで、\(K\) は質問に対する答えで、\(A_l, A_{l+1}, \dots, A_r\) に現れる相異なる値の個数です。

\(A_x = A_y~(1 \leq x \lt y \leq 2N)\) であるような正整数 \((x, y)\) を \(1\) つ特定できたら、以下の形式で標準出力に出力してください。

! \(x~y\)
これに対する応答はありません。ただちに次のテストケースに進んでください。\(T\) 個目のテストケースである場合はプログラムを終了してください。

ここで、出力形式にミスがあった場合、質問回数が \(20\) 回を超えた場合、前回のテストケースで解答した \(x, y\) が条件を満たしていなかった場合は、それ以降の \(N\) や \(K\) は与えられず、文字列 -1 が標準入力から与えられます。この場合、ただちにプログラムを終了してください。

Note

\(N=3\)、\(A = (1,3,1,2,3,2)\) の場合の入出力例です。

入力出力説明
3はじめに \(T\) が標準入力から与えられます。
3\(N\) が標準入力から与えられます。
? 1 3\((l,r) = (1,3)\) として質問します。
2\(A_1, A_2, A_3\) に現れる相異なる値は \(1,3\) の \(2\) つとなるため、ジャッジはその値を返します。
? 5 5\((l,r) = (5,5)\) として質問します。
1\(A_5\) に現れる相異なる値は \(3\) の \(1\) つとなるため、ジャッジはその値を返します。
! 4 6\((x,y) = (4,6)\) として解答します。解答した場合、ただちに次のテストケースに進む必要があります。
3\(2\) つ目のテストケースに対する \(N\) が標準入力から与えられます。
! 4 5\((x,y) = (4,5)\) として解答します。\(A_4 = 2\)、\(A_5 = 3\) のためのこの解答は不正解となります。
-1前回のテストケースで不正解であったため、-1 が標準入力から与えられます。
以降の \(N,K\) が入力されることはありません。ただちにプログラムを終了させる必要があります。