Автор: | N. Grebenyuk, A. Usmanov. Translation: A. Logutova. | Ограничение времени: | 3 сек | |
Ввод / вывод: | интерактивный | Ограничение памяти: | 256 Мб |
Данная задача является интерактивной.
В наказание за то, что ученик Алексей сидел на уроке в телефоне, учитель установил на него пароль. Паролем является последовательность из N целых положительных чисел Xi, выбранных учителем. Но он решил не тратить время на придумывание всех чисел, поэтому воспользовался генератором случайных чисел.
Чтобы разблокировать свой телефон, Алексей должен разгадать эту последовательность. Для этого он может задать учителю не более Q вопросов — делится ли i-ое число в последовательности (нумерация чисел от 1 до N) на число d.
Помогите Алексею вернуть доступ к телефону, он уже полностью раскаялся в своём поведении на уроке и больше так делать не будет.
Первая строка содержит одно целое число N — длина последовательности чисел.
Гарантируется, что числа в последовательности не изменяются в зависимости от вопросов Алексея.
Гарантируется, что последовательность чисел сгенерирована случайным образом.
Чтобы сообщить учителю свой ответ, выведите символ "!", а затем N разгаданных чисел Xi через пробел. Обратите внимание, что "!" и X1 также должны быть разделены пробелом. После этого решение должно немедленно завершиться.
Для каждого теста жюри зафиксировало число Q — максимальное количество вопросов, которые можно задать учителю. Гарантируется, что Q вопросов достаточно, чтобы решить задачу. Это число не сообщается программе-решению. Если решение делает более Q вопросов, то на этом тесте оно получает в качестве результата тестирования "Wrong answer".
Чтобы задать вопрос программа-решение должна вывести строку вида "? i d", где i (1 ≤ i ≤ N) и d (1 ≤ d ≤ 5000) — целые числа. В ответ на вопрос программа жюри подаёт на вход программе-решению либо строку "Yes", либо строку "No", в зависимости от того, делится ли i-ое число в загаданной последовательности на число d.
Каждый вопрос и вывод ответа должен заканчиваться символом перевода строки \n, а также необходимо выполнить сброс буфера:
Язык | C++ | Pascal | Java | Python |
Сброс буфера | cout.flush() | flush(output) | System.out.flush() | stdout.flush() |
100 ≤ N ≤ 400
1 ≤ Xi ≤ 5000
Q = min(150 ⋅ N, 5 ⋅ 104)
Обратите внимание, что первый тест не подходит под ограничения задачи (N = 2).
Он сделан лишь для демонстрации протокола взаимодействия программы-решения и программы жюри.
При проверке первого теста Q = 2000.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|