Detta är ett interaktivt problem.
Little Cyan Fish har en dold enkel oriktad graf med $n$ hörn, numrerade från $1$ till $n$. Du känner till värdet på $n$, men du känner inte till några av kanterna. Little Cyan Fish älskar begreppet snitt (cut). För en mängd hörn $S$, låt $\operatorname{cut}(S)$ beteckna antalet kanter som har exakt en ändpunkt i $S$.
Little Cyan Fish låter dig jämföra snitt genom att ställa frågor. I en fråga väljer du två mängder av hörn $S_1$ och $S_2$. Little Cyan Fish berättar för dig om $\operatorname{cut}(S_1)$ är mindre än, lika med eller större än $\operatorname{cut}(S_2)$.
Du kan förmodligen gissa att nästa mening kommer att handla om att återskapa grafen, men den här gången är uppgiften enklare. Little Cyan Fish ger dig ett hörn $u$, och han vill att du hittar alla hörn som är grannar till $u$ med som mest $n + 10$ frågor.
Indata
Den första raden i indatan innehåller två heltal $n$ och $u$ ($1 \le n \le 1000$, $1 \le u \le n$), som anger antalet hörn respektive det givna hörnet. Därefter börjar interaktionen.
Interaktionsprotokoll
För att ställa en fråga, skriv ut en rad i följande format:
$$?\ s_1\ s_2$$
där $s_1$ och $s_2$ är strängar av längd $n$, som endast består av tecknen 0 och 1. För varje $j \in \{1, 2\}$ tillhör hörnet $i$ mängden $S_j$ om och endast om det $i$:te tecknet i $s_j$ är 1. Mängderna får vara tomma, får överlappa och får vara lika.
Som svar på frågan får du ett enskilt tecken <, =, eller >, vilket betyder att $\operatorname{cut}(S_1)$ är mindre än, lika med respektive större än $\operatorname{cut}(S_2)$. Du måste se till att antalet frågor du ställer inte överstiger $n + 10$.
För att rapportera svaret, skriv ut en rad i följande format:
$$!\ k\ v_1\ v_2\ \dots\ v_k$$
där $k$ ($0 \le k \le n - 1$) är antalet hörn som är grannar till $u$, och $v_1, v_2, \ldots, v_k$ är deras distinkta nummer i valfri ordning. Om $k = 0$, skriv ut ! 0. Att rapportera svaret räknas inte som en fråga. Ditt program måste avslutas omedelbart efter att det har rapporterat svaret.
Efter att ha skrivit ut en fråga eller rapporterat svaret, glöm inte att skriva ut ett radbrytningstecken och tömma utmatningsbufferten (flush). Om du ställer en ogiltig fråga eller överskrider frågegränsen kommer interaktorn att stänga indataströmmen och ditt program måste avslutas.
I det här problemet är interaktorn adaptiv. Det betyder att grafen kan ändras beroende på dina frågor, så länge den inte motsäger något tidigare svar. Ditt svar måste vara korrekt för varje graf som är förenlig med alla svar du har fått.
Exempel
Indata 1
4 1 < = < =
Utdata 1
? 0000 1000 ? 0100 1100 ? 0010 1010 ? 0001 1001 ! 2 2 4
Förklaring
En graf som är förenlig med exempelinteraktionen har kanterna $(1, 2)$, $(1, 4)$ och $(2, 3)$.
Testverktyg: Ett testverktyg tillhandahålls för att hjälpa tävlande att utveckla och testa sina lösningar. Du kan ladda ner detta verktyg från bilagorna. Kör verktyget med flaggan -h för att visa användningsinstruktioner. Verktyget kontrollerar interaktionen och det rapporterade svaret, men tillämpar inte tids- eller minnesgränsen.
Testverktyget använder en fast graf som anges i dess indatafil under hela interaktionen, medan den officiella interaktorn är adaptiv. Att klara tester med testverktyget garanterar inte att din lösning är korrekt mot den officiella interaktorn.