Ini adalah soal interaktif.
Little Cyan Fish memiliki sebuah graf tak berarah sederhana tersembunyi dengan $n$ verteks, yang diberi label dari $1$ hingga $n$. Anda mengetahui nilai $n$, tetapi Anda tidak mengetahui satu pun sisinya. Little Cyan Fish sangat menyukai konsep potongan (cut). Untuk suatu himpunan verteks $S$, misalkan $\operatorname{cut}(S)$ menyatakan banyaknya sisi yang memiliki tepat satu titik ujung di $S$.
Little Cyan Fish mengizinkan Anda membandingkan potongan dengan mengajukan kueri. Dalam satu kueri, Anda memilih dua himpunan verteks $S_1$ dan $S_2$. Little Cyan Fish memberi tahu Anda apakah $\operatorname{cut}(S_1)$ lebih kecil dari, sama dengan, atau lebih besar dari $\operatorname{cut}(S_2)$.
Anda mungkin dapat menebak bahwa kalimat berikutnya akan membahas tentang memulihkan graf tersebut, tetapi kali ini tugasnya lebih mudah. Little Cyan Fish memberi Anda sebuah verteks $u$, dan ia ingin Anda menemukan semua verteks yang bertetangga dengan $u$ dalam paling banyak $n + 10$ kueri.
Masukan
Baris pertama dari masukan berisi dua bilangan bulat $n$ dan $u$ ($1 \le n \le 1000$, $1 \le u \le n$), yang masing-masing menyatakan banyaknya verteks dan verteks yang diberikan. Kemudian, interaksi dimulai.
Protokol Interaksi
Untuk mengajukan kueri, cetak satu baris dengan format berikut:
$$?\ s_1\ s_2$$
dengan $s_1$ dan $s_2$ adalah string sepanjang $n$, yang hanya terdiri dari karakter 0 dan 1. Untuk setiap $j \in \{1, 2\}$, verteks $i$ termasuk dalam $S_j$ jika dan hanya jika karakter ke-$i$ dari $s_j$ adalah 1. Himpunan-himpunan tersebut boleh kosong, boleh saling beririsan, dan boleh sama.
Sebagai respons terhadap kueri tersebut, Anda akan mendapatkan satu karakter <, =, atau >, yang masing-masing berarti bahwa $\operatorname{cut}(S_1)$ lebih kecil dari, sama dengan, atau lebih besar dari $\operatorname{cut}(S_2)$. Anda harus memastikan bahwa banyaknya kueri yang Anda ajukan tidak melebihi $n + 10$.
Untuk melaporkan jawaban, keluarkan satu baris dengan format berikut:
$$!\ k\ v_1\ v_2\ \dots\ v_k$$
dengan $k$ ($0 \le k \le n - 1$) adalah banyaknya verteks yang bertetangga dengan $u$, dan $v_1, v_2, \ldots, v_k$ adalah label-label berbeda mereka dalam urutan apa pun. Jika $k = 0$, keluarkan ! 0. Melaporkan jawaban tidak dihitung sebagai kueri. Program Anda harus segera berhenti setelah melaporkan jawaban.
Setelah mengeluarkan kueri atau melaporkan jawaban, jangan lupa untuk mengeluarkan karakter baris baru (newline) dan melakukan flush pada aliran keluaran. Jika Anda mengajukan kueri yang tidak valid atau melebihi batas kueri, interaktor akan menutup aliran masukan dan program Anda harus berhenti.
Pada soal ini, interaktor bersifat adaptif. Artinya, graf dapat berubah tergantung pada kueri Anda, selama tidak bertentangan dengan respons sebelumnya. Jawaban Anda harus benar untuk setiap graf yang konsisten dengan semua respons yang telah Anda terima.
Contoh
Masukan 1
4 1 < = < =
Keluaran 1
? 0000 1000 ? 0100 1100 ? 0010 1010 ? 0001 1001 ! 2 2 4
Catatan
Salah satu graf yang konsisten dengan interaksi contoh memiliki sisi $(1, 2)$, $(1, 4)$, dan $(2, 3)$.
Alat Penguji: Sebuah alat penguji disediakan untuk membantu peserta mengembangkan dan menguji solusi mereka. Anda dapat mengunduh alat ini dari lampiran. Jalankan alat tersebut dengan opsi -h untuk menampilkan petunjuk penggunaan. Alat ini memeriksa interaksi dan jawaban yang dilaporkan, tetapi tidak memberlakukan batas waktu maupun batas memori.
Alat penguji menggunakan graf tetap yang ditentukan dalam berkas masukannya selama interaksi berlangsung, sedangkan interaktor resmi bersifat adaptif. Lulus pengujian dengan alat penguji tidak menjamin bahwa solusi Anda benar terhadap interaktor resmi.