Далеко по свету разнесло уральских программистов.
Вот, например, программист Алексей живёт в Долине и разрабатывает инструменты для отладки программ на C++ в компании Google.
Одной из его задач является предсказание возможной утечки памяти.
Алексей долго исследовал возникающие проблемы и понял, что утечка происходит в том и только том случае, когда система приходит в следующее состояние: в нулевом и первом регистрах памяти лежат значения 0 и 1 соответственно, а значения всех остальных регистров зависят друг от друга согласно формуле xn = (xn−1 + xn−2) mod p, где n, n−1, n−2 — их номера.
Если программа Алексея встречает в регистре с некоторым номером i значение xi, то она считает текущую ситуацию опасной и вычитывает на всякий случай значение следующего регистра с номером i+1. Если оно совпадает с xi+1, то ситуация считается Очень Опасной.
Как-то в программе Алексея произошёл сбой, во время сбоя на вход поступило число x — значение некоторого регистра, но номер этого регистра не определился. Определите, может ли иметь место опасная ситуация. Если может, найдите все возможные значения номера регистра k, при которых ситуация будет опасной, для каждого k найдите значение yk следующего регистра, при котором программа сочтёт ситуацию Очень Опасной.
Заметим, что в Google используются очень мощные сервера, в которых 10100 регистров памяти.
Исходные данные
В первой строке через пробел записаны два целых числа p (2 ≤ p < 109) и x (0 ≤ x < p). Гарантируется, что p — простое.
Результат
Если ситуация может быть опасной, в первой строке выведите количество различных значений yk.
Во второй строке перечислите эти значения по возрастанию через пробел.
Если ситуация опасной быть не может, в единственной строке выведите число 0.
Примеры
исходные данные | результат |
---|
7 0
| 2
1 6
|
7 3
| 1
5
|
11 4
| 0
|
Автор задачи: Владислав Исенбаев