To jest zadanie interaktywne.
Little Cyan Fish ma ukryty prosty graf nieskierowany o $n$ wierzchołkach, ponumerowanych od $1$ do $n$. Znasz wartość $n$, ale nie znasz żadnej z krawędzi. Little Cyan Fish uwielbia pojęcie przekroju (cut). Dla zbioru wierzchołków $S$ niech $\operatorname{cut}(S)$ oznacza liczbę krawędzi mających dokładnie jeden koniec w zbiorze $S$.
Little Cyan Fish pozwala ci porównywać przekroje poprzez zadawanie zapytań. W jednym zapytaniu wybierasz dwa zbiory wierzchołków $S_1$ oraz $S_2$. Little Cyan Fish mówi ci, czy wartość $\operatorname{cut}(S_1)$ jest mniejsza, równa, czy większa od $\operatorname{cut}(S_2)$.
Prawdopodobnie potrafisz przewidzieć, że dalsza część treści będzie dotyczyć odtworzenia grafu, ale tym razem zadanie jest prostsze. Little Cyan Fish daje ci wierzchołek $u$ i chce, abyś znalazł wszystkie wierzchołki sąsiadujące z $u$ w co najwyżej $n + 10$ zapytaniach.
Wejście
Pierwszy wiersz wejścia zawiera dwie liczby całkowite $n$ oraz $u$ ($1 \le n \le 1000$, $1 \le u \le n$), oznaczające odpowiednio liczbę wierzchołków oraz dany wierzchołek. Następnie rozpoczyna się interakcja.
Interakcja
Aby zadać zapytanie, wypisz wiersz w następującym formacie:
$$?\ s_1\ s_2$$
gdzie $s_1$ oraz $s_2$ są napisami długości $n$, składającymi się wyłącznie ze znaków 0 oraz 1. Dla każdego $j \in \{1, 2\}$ wierzchołek $i$ należy do $S_j$ wtedy i tylko wtedy, gdy $i$-ty znak napisu $s_j$ jest równy 1. Zbiory mogą być puste, mogą się przecinać i mogą być równe.
Jako odpowiedź na zapytanie otrzymasz pojedynczy znak <, = lub >, oznaczający odpowiednio, że wartość $\operatorname{cut}(S_1)$ jest mniejsza, równa lub większa od $\operatorname{cut}(S_2)$. Musisz upewnić się, że liczba zadanych przez ciebie zapytań nie przekroczy $n + 10$.
Aby zgłosić odpowiedź, wypisz wiersz w następującym formacie:
$$!\ k\ v_1\ v_2\ \dots\ v_k$$
gdzie $k$ ($0 \le k \le n - 1$) to liczba wierzchołków sąsiadujących z $u$, natomiast $v_1, v_2, \ldots, v_k$ to ich parami różne numery w dowolnej kolejności. Jeśli $k = 0$, wypisz ! 0. Zgłoszenie odpowiedzi nie wlicza się do liczby zapytań. Twój program musi natychmiast zakończyć działanie po zgłoszeniu odpowiedzi.
Po wypisaniu zapytania lub zgłoszeniu odpowiedzi nie zapomnij wypisać znaku nowej linii oraz opróżnić bufora wyjścia (flush). Jeśli zadasz nieprawidłowe zapytanie lub przekroczysz limit zapytań, interaktor zamknie strumień wejściowy, a twój program musi zakończyć działanie.
W tym zadaniu interaktor jest adaptacyjny. Oznacza to, że graf może zmieniać się w zależności od twoich zapytań, o ile nie jest to sprzeczne z żadną dotychczasową odpowiedzią. Twoja odpowiedź musi być poprawna dla każdego grafu zgodnego ze wszystkimi otrzymanymi przez ciebie odpowiedziami.
Przykład
Wejście 1
4 1 < = < =
Wyjście 1
? 0000 1000 ? 0100 1100 ? 0010 1010 ? 0001 1001 ! 2 2 4
Uwagi
Jeden z grafów zgodnych z przykładową interakcją ma krawędzie $(1, 2)$, $(1, 4)$ oraz $(2, 3)$.
Narzędzie testujące: Udostępniono narzędzie testujące, aby pomóc zawodnikom w tworzeniu i testowaniu swoich rozwiązań. Możesz pobrać to narzędzie z załączników. Uruchom narzędzie z opcją -h, aby wyświetlić instrukcję użycia. Narzędzie sprawdza przebieg interakcji oraz zgłoszoną odpowiedź, ale nie egzekwuje limitu czasu ani pamięci.
Narzędzie testujące przez całą interakcję używa ustalonego grafu określonego w jego pliku wejściowym, podczas gdy oficjalny interaktor jest adaptacyjny. Pomyślne przejście testów przy użyciu narzędzia testującego nie gwarantuje, że twoje rozwiązanie jest poprawne w starciu z oficjalnym interaktorem.