Послідовність#4957

Послідовність

3 секунди
64 мегабайти
Середня

Відома рекурентна формула для послідовності :

f(n) = 1 + f(1)g(1) + f(2)g(2) + \ldots + f(n-1)g(n-1),

де - також послідовність з наступною рекурентною формулою:

g(n) = 1 + 2g(1) + 2g(2) + 2g(3) + \ldots + 2g(n-1) - g(n-1)g(n-1).

Крім того, відомо, що: f(1) = 1, g(1) = 1.

Ваша задача - знайти по модулю .

Вхідні дані

У вхідному файлі міститься декілька тестів. Кожен тест у окремому рядку містить два числа: (1 \le n \le 10000) та (2 \le p \le 2 \cdot 10^9). Тест з n=p=0 завершує вхідний файл, він не повинен опрацьовуватись. Кількість тестів у одному файлі не перевищує .

Вихідні дані

У вихідний файл для кожного тесту виведіть у окремому рядку єдине число - по модулю .

Приклади

Приклад 1

Loading
Loading