Задача I. Избыточная коллекция

Автор:A. Usmanov   Ограничение времени:1 сек
Ввод / вывод:интерактивный   Ограничение памяти:256 Мб

Условие

Данная задача является интерактивной. Ваша программа будет взаимодействовать с программой жюри путем отправки и приема сообщений определенного вида.

Долгое время мальчик Петя собирал коллекцию целых чисел. Разумеется, Петя бережно относится к своей коллекции: не разбрасывает по дому, и, более того, хранит её в упорядоченном виде.

Сейчас в коллекции Пети ровно 7 четных и 3 нечетных числа. Пете не очень нравятся нечетные числа, поэтому он готов отдать их вам, но только если вы угадаете на каких позициях они находятся. Чтобы вы смогли это сделать, Петя согласен ответить на несколько вопросов касательно своей коллекции. А именно — он может сказать, имеют ли два числа на каких-то позициях одинаковую четность.

Петя готов ответить лишь на 7 вопросов, и при этом не более 2-х вопросов про одно и тоже число. Если вы попытаетесь нарушить эти правила, Петя заподозрит вас в попытке украсть коллекцию, и обратится в СКПЦЧ (служба по контролю за перемещением целых чисел).

Протокол взаимодействия

Чтобы задать вопрос, ваша программа должна вывести "? X Y", где X, Y — целые числа, номера позиций в коллекции Пети, про которые вы хотите узнать. В ответ на вопрос программа жюри подаёт на вход вашей программе строку "Yes" или "No" — имеют ли числа на соответствующих позициях одинаковую четность.

Ваша программа может задать только 7 вопросов, и не более 2-х вопросов про одно и тоже число. Если ваша программа превысит количество вопросов, то она получит вердикт "Wrong answer".

Когда ваша программа определила ответ на задачу, она должна вывести "! X Y Z", где X, Y, Z — целые числа, номера позиций в коллекции Пети, на которых находятся нечетные числа. После вывода ответа программа должна завершиться.

Каждый вопрос и вывод окончательного результата должен быть одиночной строкой заканчивающейся одиночным переводом строки (\n). Буфер вывода необходимо сбрасывать после каждой строки:

Язык C++ Pascal Java Python
Код cout.flush() flush(output) System.out.flush() stdout.flush()

Если ваша программа сделает недопустимый вывод, то она получит вердикт "Presentation error". Если ваша программа получила от программы жюри строку "-1" в качестве ответа, то она должна немедленно завершиться. Такое возможно, если ваша программа нарушила протокол взаимодействия. Если ваша программа не завершится в таком случае, то вердикт может отличаться от описанных выше (например, может быть вердикт "Runtime error").

Ограничения

1 ≤ X, Y, Z ≤ 10

Примеры тестов

Стандартный вход Стандартный выход
1

No

No

No

Yes

Yes

Yes

No
? 1 2

? 2 3

? 3 4

? 4 5

? 5 6

? 6 7

? 7 8

! 1 3 8

0.090s 0.011s 13