EduBrick

L. Функция Аккермана

3000 мс · 256 МБ · всё или ничего

Функция Аккермана определена так:

  • A(0,n)=n+1A(0, n) = n + 1;
  • A(m,0)=A(m−1,1)A(m, 0) = A(m-1, 1) при m>0m > 0;
  • A(m,n)=A(m−1,A(m,n−1))A(m, n) = A(m-1, A(m, n-1)) при m>0m > 0 и n>0n > 0.

Вычислите A(m,n)A(m, n).

Это самый известный пример рекурсии, которую нельзя развернуть в простой цикл: второй аргумент внутреннего вызова сам является вызовом. Считать её надо ровно по определению.

Глубина вызовов доходит до нескольких тысяч — это нормально, а вот запоминание здесь не поможет: пары аргументов почти не повторяются.

Формат ввода

Одна строка содержит числа mm и nn (0≤m≤30 \le m \le 3, 0≤n≤1000 \le n \le 100).

Гарантируется, что вызовов функции будет не больше 5⋅1075 \cdot 10^7. Для A(3,10)A(3, 10) их, например, 44 698 325 — а само значение всего 8189.

Формат вывода

Одно число — A(m,n)A(m, n).

Примеры

ввод
2 5
вывод
13
ввод
0 100
вывод
101
Войдите, чтобы отправлять решения.