これはインタラクティブな問題です。出力するたびに出力バッファをフラッシュしてください。次の方法を利用できます。
- C/C++ では
fflush(stdout)またはcout.flush(); - Java および Kotlin では
System.out.flush(); - Python では
sys.stdout.flush(); - その他の言語についてはドキュメントを参照してください。
Little Cyan Fish は、$0$ から $n$ までの整数からなる長さ $n+1$ の秘密の順列 $p_0,p_1,\ldots,p_n$ を持っています。彼はあなたにこの秘密の順列を当ててほしいと考えています。そのため、Little Cyan Fish は以下の形式の質問を $1024$ 回以下行うことを許可します。
? i j:$p_k=|p_i-p_j|$ を満たす添字 $k$($0\le k\le n$)を取得します。
もちろん、質問が有効となるためには、$i$ と $j$ がともに $[0,n]$ 内の整数であることを保証する必要があります。例えば、$p_0=2,p_1=0,p_2=1$ のとき、質問 ? 0 2 の応答は添字 $2$ です。これは $|p_0-p_2|=|2-1|=1=p_2$ だからです。
Little Cyan Fish は、あなたに順列を求める戦略を考えてほしいと思っています。もちろん、Little Cyan Fish はあなたが簡単にゲームに勝つことを望んでいません。そのため、彼はあなたを引っ掛けるために順列 $p$ を適応的に変更します(詳細は「インタラクション」を参照)。
入力
複数のテストケースがあります。入力の最初の行には、テストケース数を表す整数 $T$($1\le T\le100$)が与えられます。
各テストケースについて、入力の最初の行には整数 $n$($1\le n\le1000$)が与えられます。その後、インタラクションが始まります。
インタラクション
質問するには、次の形式で $1$ 行出力してください。
$$?\ i\ j$$
ここで、$i$ と $j$ は $0$ 以上 $n$ 以下の整数です。質問回数は $1024$ 回以下でなければなりません。応答として、$p_k=|p_i-p_j|$ を満たす整数 $k$ が与えられます。
答えを報告するには、次の形式で $1$ 行出力してください。
$$!\ p_0\ p_1\ \ldots\ p_n$$
ここで、$p$ は報告したい順列です。
質問の出力後または答えの報告後には、必ず改行を出力し、出力ストリームをフラッシュしてください。
この問題のインタラクタは適応的です。つまり、それまでの質問と矛盾しない限り、あなたの質問に応じて順列 $p$ が変化する可能性があります。
入出力例
インタラクション例 1
読み込み:
1
3
書き込み:
? 2 2
読み込み:
1
書き込み:
? 0 3
読み込み:
3
書き込み:
! 2 0 3 1
テストツール: 参加者が解法を開発・テストするためのツールが提供されています。添付ファイルからダウンロードできます。-h オプションを付けて実行すると、使い方が表示されるはずです。このツールは、一部のテスト状況と、実際のジャッジプログラムの一部の機能だけを実装しています。