U472940 阿克曼函数

题目背景

- 阿克曼函数($\text{Ackermann}$)是非原始递归函数的经典例子。 - 它以两个自然数 $x,y$ 作为输入值,返回一个自然数 $\operatorname{Ackermann}(x,y)$,它的输出值增长速度非常快,下面是一个简单的例子: - 设 $a(\operatorname{Ackermann}(x,x))=O(x)$,那么 $a(x)=O(a(\log x))$。 - 虽然当 $x,y$ 稍大之后,阿克曼函数的确切值,甚至它的位数,都不存在求出来的可能性,但你只需要求出它模一个小整数 $p$ 的结果,而这是容易做到的。

题目描述

- 下面是阿克曼函数的定义式: $$\operatorname{Ackermann}(x,y)=\begin{cases}y+1&x=0\\\operatorname{Ackermann}(x-1,1)&x>0,y=0\\\operatorname{Ackermann}(x-1,\operatorname{Ackermann}(x,y-1))&\text{otherwise.}\end{cases}$$ - 给定 $T$ 组 $x,y,p$ 三元组,你需要求出 $\operatorname{Ackermann}(x,y)\bmod p$ 的结果。

输入格式

- 第一行,一个自然数 $T$。 - 接下 $T$ 行,三个自然数 $x,y,p$。

输出格式

- $T$ 行每行一个整数,表示对应询问的 $\operatorname{Ackermann}(x,y)\bmod p$。

说明/提示

- 对于所有数据 $0\le T\le 300$,$0\le x,y\le 10^9$,$1\le p\le 10^9$。 - 不保证 $p$ 是质数。