Це інтерактивна задача.
У Маленької Ціанової Рибки є прихований простий неорієнтований граф із $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, щоб відобразити інструкції з використання. Інструмент перевіряє взаємодію та виведену відповідь, але не контролює обмеження за часом або пам'яттю.
Інструмент для тестування використовує фіксований граф, заданий у його вхідному файлі, протягом усієї взаємодії, тоді як офіційний інтерактор є адаптивним. Проходження тестів за допомогою інструменту для тестування не гарантує, що ваш розв'язок буде правильним під час перевірки офіційним інтерактором.