Questo è un problema interattivo.
Little Cyan Fish ha un grafo non orientato semplice nascosto con $n$ vertici, numerati da $1$ a $n$. Conosci il valore di $n$, ma non conosci nessuno degli archi. Little Cyan Fish adora il concetto di taglio (cut). Per un insieme di vertici $S$, sia $\operatorname{cut}(S)$ il numero di archi con esattamente un estremo in $S$.
Little Cyan Fish ti permette di confrontare i tagli effettuando delle query. In una query, scegli due insiemi di vertici $S_1$ e $S_2$. Little Cyan Fish ti dice se $\operatorname{cut}(S_1)$ è minore, uguale o maggiore di $\operatorname{cut}(S_2)$.
Probabilmente puoi prevedere che il seguito riguarderà il recupero del grafo, ma questa volta il compito è più semplice. Little Cyan Fish ti dà un vertice $u$ e vuole che tu trovi tutti i vertici adiacenti a $u$ in al massimo $n + 10$ query.
Input
La prima riga dell'input contiene due interi $n$ e $u$ ($1 \le n \le 1000$, $1 \le u \le n$), che indicano rispettivamente il numero di vertici e il vertice dato. Successivamente, inizia l'interazione.
Protocollo di interazione
Per effettuare una query, stampa una riga nel seguente formato:
$$?\ s_1\ s_2$$
dove $s_1$ e $s_2$ sono stringhe di lunghezza $n$, composte solo dai caratteri 0 e 1. Per ogni $j \in \{1, 2\}$, il vertice $i$ appartiene a $S_j$ se e solo se l'$i$-esimo carattere di $s_j$ è 1. Gli insiemi possono essere vuoti, possono sovrapporsi e possono essere uguali.
Come risposta alla query, riceverai un singolo carattere <, = oppure >, che significa rispettivamente che $\operatorname{cut}(S_1)$ è minore, uguale o maggiore di $\operatorname{cut}(S_2)$. Devi assicurarti che il numero di query effettuate non superi $n + 10$.
Per comunicare la risposta, stampa una riga nel seguente formato:
$$!\ k\ v_1\ v_2\ \dots\ v_k$$
dove $k$ ($0 \le k \le n - 1$) è il numero di vertici adiacenti a $u$, e $v_1, v_2, \ldots, v_k$ sono le loro etichette distinte in qualsiasi ordine. Se $k = 0$, stampa ! 0. Comunicare la risposta non conta come una query. Il tuo programma deve terminare immediatamente dopo aver comunicato la risposta.
Dopo aver stampato una query o comunicato la risposta, non dimenticare di stampare un carattere di ritorno a capo e di svuotare il buffer di output (flush). Se effettui una query non valida o superi il limite di query, l'interattore chiuderà il flusso di input e il tuo programma dovrà terminare.
In questo problema, l'interattore è adattivo. Ciò significa che il grafo può cambiare a seconda delle tue query, purché non contraddica alcuna risposta precedente. La tua risposta deve essere corretta per ogni grafo coerente con tutte le risposte che hai ricevuto.
Esempi
Input 1
4 1 < = < =
Output 1
? 0000 1000 ? 0100 1100 ? 0010 1010 ? 0001 1001 ! 2 2 4
Nota
Un grafo coerente con l'interazione di esempio ha gli archi $(1, 2)$, $(1, 4)$ e $(2, 3)$.
Strumento di test: Viene fornito uno strumento di test per aiutare i concorrenti a sviluppare e testare le proprie soluzioni. Puoi scaricare questo strumento dagli allegati. Esegui lo strumento con l'opzione -h per visualizzare le istruzioni d'uso. Lo strumento verifica l'interazione e la risposta comunicata, ma non applica i limiti di tempo o di memoria.
Lo strumento di test utilizza un grafo fisso specificato nel suo file di input durante tutta l'interazione, mentre l'interattore ufficiale è adattivo. Superare i test con lo strumento di test non garantisce che la tua soluzione sia corretta rispetto all'interattore ufficiale.