Это интерактивная задача.
У Маленькой Циановой Рыбки есть скрытый простой неориентированный граф с $n$ вершинами, пронумерованными от $1$ до $n$. Вам известно значение $n$, но вы не знаете ни одного ребра. Маленькая Циановая Рыбка очень любит понятие разреза (cut). Для множества вершин $S$ обозначим через $\operatorname{cut}(S)$ количество рёбер, у которых ровно один конец принадлежит $S$.
Маленькая Циановая Рыбка позволяет вам сравнивать разрезы с помощью запросов. В одном запросе вы выбираете два множества вершин $S_1$ и $S_2$. Маленькая Циановая Рыбка сообщает вам, является ли величина $\operatorname{cut}(S_1)$ меньшей, равной или большей, чем $\operatorname{cut}(S_2)$.
Вы, вероятно, можете предсказать, что дальше речь пойдёт о восстановлении графа, но на этот раз задача проще. Маленькая Циановая Рыбка даёт вам вершину $u$ и хочет, чтобы вы нашли все вершины, смежные с $u$, не более чем за $n + 10$ запросов.
Входные данные
Первая строка входных данных содержит два целых числа $n$ и $u$ ($1 \le n \le 1000$, $1 \le u \le n$), обозначающих количество вершин и данную вершину соответственно. Затем начинается взаимодействие.
Протокол взаимодействия
Чтобы сделать запрос, выведите строку в следующем формате:
$$?\ s_1\ s_2$$
где $s_1$ и $s_2$ — строки длины $n$, состоящие только из символов 0 и 1. Для каждого $j \in \{1, 2\}$ вершина $i$ принадлежит $S_j$ тогда и только тогда, когда $i$-й символ строки $s_j$ равен 1. Множества могут быть пустыми, могут пересекаться и могут совпадать.
В качестве ответа на запрос вы получите один символ <, = или >, означающий, что величина $\operatorname{cut}(S_1)$ меньше, равна или больше $\operatorname{cut}(S_2)$ соответственно. Вы должны гарантировать, что количество сделанных вами запросов не превышает $n + 10$.
Чтобы сообщить ответ, выведите строку в следующем формате:
$$!\ k\ v_1\ v_2\ \dots\ v_k$$
где $k$ ($0 \le k \le n - 1$) — количество вершин, смежных с $u$, а $v_1, v_2, \ldots, v_k$ — их различные номера в любом порядке. Если $k = 0$, выведите ! 0. Вывод ответа не считается запросом. Ваша программа должна немедленно завершиться после вывода ответа.
После вывода запроса или ответа не забудьте вывести символ перевода строки и сбросить буфер вывода (flush). Если вы сделаете некорректный запрос или превысите лимит запросов, интерактор закроет входной поток, и ваша программа должна завершиться.
В этой задаче интерактор является адаптивным. Это означает, что граф может меняться в зависимости от ваших запросов, пока это не противоречит ни одному из предыдущих ответов. Ваш ответ должен быть правильным для любого графа, согласующегося со всеми полученными вами ответами.
Примеры
Входные данные 1
4 1 < = < =
Выходные данные 1
? 0000 1000 ? 0100 1100 ? 0010 1010 ? 0001 1001 ! 2 2 4
Примечание
Один из графов, согласующихся с примером взаимодействия, содержит рёбра $(1, 2)$, $(1, 4)$ и $(2, 3)$.
Инструмент для тестирования: Для помощи участникам в разработке и тестировании решений предоставляется инструмент для тестирования. Вы можете скачать этот инструмент из вложений. Запустите инструмент с опцией -h, чтобы отобразить инструкции по использованию. Инструмент проверяет взаимодействие и выведенный ответ, но не контролирует ограничения по времени или памяти.
Инструмент для тестирования использует фиксированный граф, заданный в его входном файле, на протяжении всего взаимодействия, тогда как официальный интерактор является адаптивным. Прохождение тестов с помощью инструмента для тестирования не гарантирует, что ваше решение будет верным при проверке официальным интерактором.