Plang Province では、$n=300$ 人の学生が Plang OI 2026 に参加しました。そのうち、金メダルを獲得した学生とそうでない学生がいます。 Plang Province の学生には奇妙な習慣があります。金メダルを獲得しなかった場合、正直に「獲得していない」と言います。しかし、金メダルを獲得した場合、確率 $p$ で「獲得した」と言い、残りの確率 $1-p$ で「獲得していない」と言います。なお、各応答はランダムであり、以前の応答とは無関係です。
あなたは Plang Province のコーチとして、各学生が金メダルを獲得したかどうかを知りたいです。その後、Una に以下の操作を行わせることができます。
- 異なる学生をいくつか選び、Una にそれぞれの学生が金メダルを獲得したかどうかを尋ねさせます。Una は「はい」と答えた人数を教えてくれます。
Plang OI 2025 の金メダルラインは 571 点でした。平均して 568 回のクエリで答えを見つける必要があります。 Plang OI の制限のため、金メダルを獲得した学生はちょうど 48 人であると仮定できます。
インタラクションプロトコル
これはインタラクティブな問題です。各プリントの後、必ず出力バッファをフラッシュしてください。出力バッファをフラッシュするには、以下を使用できます。
- C/C++ では
fflush(stdout)またはcout.flush() - Java および Kotlin では
System.out.flush() - Python では
sys.stdout.flush()
まず、テストケースの数 $T$ ($T=20$) を示す整数を読み込みます。 各テストケースについて、学生の数 $n$ ($n=300$) を示す整数を読み込みます。
クエリを行うには、"? k P1 P2 ... Pk" という形式の行を出力します($1 \le P_i \le n$、$P_i \ne P_j$ for $i \ne j$)。 次に、Una が見つけた答えを示す整数を読み込みます。クエリが無効である場合、または合計で $568T$ 回を超えるクエリを行った場合、ジャッジプログラムは -1 を出力します。-1 を読み込んだら、未定義の動作を避けるためにすぐに終了してください。
答えが得られたら、"! s1 s2 ... sn" という形式の行を出力します。ここで、$s_i=1$ は $i$ 番目の学生が金メダルを獲得したことを示し、$s_i=0$ はそうでないことを示します。 次に、OK または WA という単語を読み込み、答えが正しいかどうかを示します。プログラムが WA を読み込んだ場合、未定義の動作を避けるためにすぐに終了してください。
ジャッジはアダプティブではないことに注意してください。つまり、クエリの後でも答えは変わりません。テストケースは最大で 10 個です。
入出力例
入力 1
1
出力 1
? 2 1 2
入力 2
2
出力 2
? 1 1
入力 3
0
出力 3
? 1 2
入力 4
0
出力 4
! 0 1
入力 5
1
出力 5
OK
注記
この例は参照用であり、$T=20$ および $n=300$ を満たしておらず、最終テストには表示されません。 テストツールが提供されており、競技者はソリューションを開発およびテストできます。このツールは添付ファイルからダウンロードできます。「-h」オプションを付けてツールを実行すると、ツールの使用方法が説明されるはずです。テストツールは、一部のテストシナリオと、実際のジャッジプログラムの一部の機能のみを実装します。