F. Рандомайзер
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Это интерактивная задача

Размышляя над разными несложными генераторами псевдо случайных чисел, Andrew-13 решил рассмотреть линейный генератор, который характеризуется параметрами $$$a$$$, $$$b$$$ и $$$p$$$ ($$$1 \le a \lt p$$$, $$$0 \le b \lt p$$$, $$$p$$$ – простое число, $$$2 \le p \lt 10^9$$$). На вход генератору подаётся время $$$t$$$, а генератор выводит $$$(at + b) \mod p$$$.

Для того чтобы показать ненадёжность такого генератора, Andrew-13 решил написать программу, которая, не зная чисел $$$a$$$, $$$b$$$ и $$$p$$$, находит их, делая запросы к генератору. При этом программа делает не более $$$13$$$ запросов.

Сможете ли вы написать свою программу, которая справится с этой задачей?

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

В начале каждого теста выбираются числа $$$a$$$, $$$b$$$ и $$$p$$$, соответствующие ограничениям из условия.

Затем ваша программа начинает взаимодействие с интерактором.

Для того чтобы узнать значение ГПСЧ, описанного в условии, выведите «? $$$t$$$» на отдельной строке ($$$0 \le t \lt 10^{18}$$$, $$$t$$$ - целое). Вы получите значение $$$(at + b) \mod p$$$.

Когда программа готова дать ответ, она должна вывести «! $$$a$$$ $$$b$$$ $$$p$$$» на отдельной строке и затем завершиться.

Если вы сделаете более $$$13$$$ запросов во время взаимодействия, ваша программа должна немедленно завершиться, и вы получите вердикт Неправильный ответ. В противном случае вы можете получить произвольный вердикт.

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение зависло. Для этого используйте:

  • fflush(stdout) или cout.flush() в C++;
  • sys.stdout.flush() в Python;
Пример
Входные данные

13

4

12
Выходные данные
? 6

? 12

? 998244353

! 7 5 17