eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Последовательность

Последовательность

Известна рекуррентная формула для последовательности \textbf{f}: \textbf{f(n) = 1 + f(1)g(1) + f(2)g(2) + ... + f(n-1)g(n-1)}, где \textbf{g} - тоже последовательность со следующей рекуррентной формулой: \textbf{g(n) = 1 + 2g(1) + 2g(2) + 2g(3) + ... + 2g(n-1) - g(n-1)g(n-1)}. Кроме того, известно: \textbf{f(1) = 1}, \textbf{g(1) = 1}. Ваша задача - найти \textbf{f(n)} по модулю \textbf{p}. \InputFile Во входном файле содержатся несколько тестов. Каждый тест в отдельной строке содержит два числа: \textbf{n} (\textbf{1} ≤ \textbf{n} ≤ \textbf{10000}) и \textbf{p} (\textbf{2} ≤ \textbf{p} ≤ \textbf{2·10^9}). Тест с \textbf{n=p=0} завершает входной файл, он не должен обрабатываться. Количество тестов в одном файле не превышает \textbf{5000}. \OutputFile В выходной файл для каждого теста выведите в отдельной строке единственное число - \textbf{f(n)} по модулю \textbf{p}.
Лимит времени 3 секунды
Лимит использования памяти 64 MiB
Входные данные #1
1 2
2 11
0 0
Выходные данные #1
1
2
Автор Dmitry Gozman
Источник Dmitry Gozman Contest 1, Petrozavodsk training camp, January 2007