Ini adalah soal interaktif. Ingatlah untuk mengosongkan buffer keluaran setiap kali mencetak. Kamu dapat menggunakan:
fflush(stdout)ataucout.flush()dalam C/C++;System.out.flush()dalam Java dan Kotlin;sys.stdout.flush()dalam Python;- Lihat dokumentasi untuk bahasa lainnya.
Little Cyan Fish memiliki permutasi rahasia $p_0,p_1,\ldots,p_n$ sepanjang $n+1$, yang terdiri dari bilangan bulat dari $0$ hingga $n$. Ia ingin kamu menebak permutasi rahasia tersebut. Untuk itu, Little Cyan Fish mengizinkanmu melakukan paling banyak $1024$ kueri berbentuk berikut:
? i j: Dapatkan indeks $k$ ($0\le k\le n$) sehingga $p_k=|p_i-p_j|$.
Tentu saja, agar kueri valid, kamu harus menjamin bahwa $i$ dan $j$ adalah dua bilangan bulat dalam $[0,n]$. Sebagai contoh, jika $p_0=2,p_1=0,p_2=1$, kueri ? 0 2 akan memberikan indeks $2$ karena $|p_0-p_2|=|2-1|=1=p_2$.
Little Cyan Fish ingin kamu merancang strategi untuk menemukan permutasi. Tentu saja, ia tidak ingin kamu memenangkan permainan terlalu mudah. Karena itu, ia akan mengubah permutasi $p$ secara adaptif untuk menjebakmu (lihat “Interaksi” untuk perincian lebih lanjut).
Masukan
Terdapat beberapa kasus uji. Baris pertama masukan berisi sebuah bilangan bulat $T$ ($1\le T\le100$), yang menyatakan jumlah kasus uji.
Untuk setiap kasus uji, baris pertama masukan berisi sebuah bilangan bulat $n$ ($1\le n\le1000$). Kemudian, interaksi dimulai.
Interaksi
Untuk membuat kueri, cetak satu baris dengan format berikut:
$$?\ i\ j$$
Di sini $i$ dan $j$ adalah dua bilangan bulat dari $0$ hingga $n$. Kamu harus memastikan jumlah kueri tidak melebihi $1024$. Sebagai tanggapan, kamu akan menerima bilangan bulat $k$ sehingga $p_k=|p_i-p_j|$.
Untuk melaporkan jawaban, cetak satu baris dengan format berikut:
$$!\ p_0\ p_1\ \ldots\ p_n$$
Di sini $p$ adalah permutasi yang ingin kamu laporkan.
Setelah mencetak kueri atau melaporkan jawaban, jangan lupa mencetak karakter baris baru dan mengosongkan aliran keluaran.
Dalam soal ini, interaktor bersifat adaptif. Artinya, permutasi $p$ dapat berubah tergantung pada kuerimu, asalkan tidak bertentangan dengan kueri sebelumnya.
Contoh
Contoh Interaksi 1
Baca:
1
3
Tulis:
? 2 2
Baca:
1
Tulis:
? 0 3
Baca:
3
Tulis:
! 2 0 3 1
Alat Pengujian: Sebuah alat disediakan untuk membantu peserta mengembangkan dan menguji solusi. Kamu dapat mengunduh alat ini dari lampiran. Menjalankannya dengan opsi -h seharusnya menjelaskan cara penggunaannya. Alat pengujian hanya mengimplementasikan sebagian skenario pengujian dan sebagian fungsi program penilai sebenarnya.