Soal ini bersifat interaktif. Setelah mencetak setiap baris, Anda harus mengosongkan buffer keluaran (flush). Anda dapat menggunakan cout << flush di C++, System.out.flush() di Java, dan sys.stdout.flush() di Python. Anda harus mengikuti instruksi di bagian Interaksi dengan ketat; jika tidak, Anda mungkin menerima vonis seperti jawaban salah (wrong answer), batas waktu terlampaui (time limit exceeded), atau lainnya.
Karena semua tugas memiliki kurcaci mitos sebagai karakter utamanya, mungkin ada baiknya akhirnya memikirkan sesuatu yang nyata.
Terdapat sebuah barisan tersembunyi $A$ dengan panjang $N$ yang terdiri dari bilangan bulat dalam rentang $[0, 2^N - 1]$. Tugas Anda adalah memulihkannya menggunakan jumlah kueri yang terbatas. Dalam setiap kueri, Anda memberikan sebuah barisan $B$ dengan panjang $N$ dengan elemen-elemen dalam rentang $[0, 2^N - 1]$. Responsnya dihitung sebagai berikut:
- Barisan $C$ dibuat di mana elemen ke-$i$ dari $C$ adalah bitwise xor dari elemen ke-$i$ dari $A$ dan $B$. Kita melambangkan xor dengan $\oplus$.
- Himpunan $S$ dibentuk sebagai himpunan semua nilai yang dapat diperoleh dengan melakukan xor pada suatu himpunan bagian dari elemen-elemen $C$. Khususnya, untuk himpunan bagian kosong, hasil xor-nya adalah $0$.
- Jawaban untuk kueri tersebut adalah $|S|$.
Sebagai contoh, jika $A = (1, 4, 3)$ dan $B = (0, 4, 7)$, maka $C = (1 \oplus 0, 4 \oplus 4, 3 \oplus 7) = (1, 0, 4)$ dan $S = \{0, 1, 4, 5\}$, sehingga jawabannya adalah $4$.
Bitwise xor dari dua bilangan $x$ dan $y$ memiliki bit $i$ bernilai aktif jika dan hanya jika tepat satu dari $x$ dan $y$ memiliki bit $i$ bernilai aktif. Sebagai contoh, $5 \oplus 3 = (101)_2 \oplus (011)_2 = (110)_2 = 6$. Di C++ dan Python, xor adalah operator ^.
Interaksi
Barisan $A$ sudah ditetapkan sejak awal dan tidak bergantung pada kueri yang dilakukan.
Pertama, baca satu baris yang berisi satu bilangan bulat $1 \le N \le 60$. Kemudian Anda dapat mengajukan kueri.
Untuk mengajukan kueri, cetak satu baris yang berisi ? diikuti oleh $N$ bilangan bulat dalam rentang $[0, 2^N - 1]$. Sebagai respons, baca satu bilangan bulat yang merupakan jawabannya.
Ketika sudah siap, cetak ! diikuti oleh $N$ bilangan bulat dari barisan tersembunyi tersebut. Kemudian program Anda harus keluar tanpa keluaran lebih lanjut.
Ingatlah untuk melakukan flush setelah setiap kueri dan setelah menulis jawaban. Berikan spasi antara angka dan simbol ?, !.
Contoh
Masukan 1
3 4 8
Keluaran 1
? 1 2 3 ? 0 0 0 ! 1 3 4
Catatan
Penjelasan untuk interaksi contoh:
$N = 3$
Kueri ? 1 2 3: $B = (1, 2, 3)$, $C = (1 \oplus 1, 3 \oplus 2, 4 \oplus 3) = (0, 1, 7)$, $S = \{0, 1, 6, 7\}$, jawabannya adalah $4$.
Kueri ? 0 0 0: $B = (0, 0, 0)$, $C = (1 \oplus 0, 3 \oplus 0, 4 \oplus 0) = (1, 3, 4)$, $S = \{0, 1, \dots, 7\}$, jawabannya adalah $8$.
Keluaran ! 1 3 4: Barisan tersembunyi tersebut adalah $A = (1, 3, 4)$.
Pengujian Lokal
Di bagian Files Anda dapat menemukan B.zip yang berisi uji contoh dan grader grader.cpp. Untuk menguji solusi Anda, kompilasi solusi tersebut, lalu berikan nama uji dan berkas eksekusi Anda ke ./grader yang telah dikompilasi:
./grader [test] [executable]
Sebagai contoh: ./grader 0b.in ./abc
Grader contoh tidak dijamin berperilaku identik dengan grader resmi. Namun, keduanya tidak bersifat adaptif.