#CF2001E2. 确定性堆(困难版)

确定性堆(困难版)

E2. 确定性堆(困难版)
每个测试点的时间限制:4 秒
内存限制:512 兆字节

这是该问题的困难版。两个版本的区别在于确定性最大堆的定义、时间限制以及 nnkk 的约束。只有当问题的两个版本都通过时,你才能进行 hack。

考虑一棵大小为 2n12^n - 1 的完美二叉树,节点编号从 112n12^n - 1,根节点为 11
对于每个节点 vv1v2n111 \le v \le 2^{n-1} - 1),节点 2v2v 是其左子节点,节点 2v+12v + 1 是其右子节点。
每个节点 vv 还有一个值 ava_v

定义 pop 操作如下:

  • 将变量 vv 初始化为 11
  • 重复以下过程,直到 vv 是叶子节点(即 2n1v2n12^{n-1} \le v \le 2^n - 1):
    • vv 的子节点中,选择值较大的一个,记为 xx;如果两个子节点的值相等(即 a2v=a2v+1a_{2v} = a_{2v+1}),你可以任意选择其中一个;
    • axa_x 赋值给 ava_v(即 av:=axa_v := a_x);
    • xx 赋值给 vv(即 v:=xv := x);
    • ava_v 赋值为 1-1(即 av:=1a_v := -1)。

我们称这次 pop 操作是确定性的,如果整个操作过程只有唯一一种方式。换句话说,在需要选择子节点时,始终满足 a2va2v+1a_{2v} \neq a_{2v+1}

一棵二叉树被称为 最大堆,如果对于每个节点 vv1v2n111 \le v \le 2^{n-1} - 1),都有 ava2va_v \ge a_{2v}ava2v+1a_v \ge a_{2v+1}

一个最大堆是确定性的,如果当我们第一次和第二次对该堆执行 pop 操作时,这些 pop 操作都是确定性的。

初始时,所有节点的值 av:=0a_v := 01v2n11 \le v \le 2^n - 1),你的目标是计算通过恰好执行 kk 次如下定义的 add 操作所能产生的不同确定性最大堆的数量:

  • 选择一个整数 vv1v2n11 \le v \le 2^n - 1),对于从 11vv 的路径上的每个节点 xx,将 axa_x 增加 11

两个堆被认为是不同的,如果存在某个节点,在两个堆中的值不同。

由于答案可能很大,请输出它对 pp 取模的结果。


输入
每个测试包含多个测试用例。第一行包含测试用例的数量 tt1t501 \le t \le 50)。
接下来每个测试用例的描述如下:

  • 第一行包含三个整数 n,k,pn, k, p2n1002 \le n \le 1001k5001 \le k \le 500108p10910^8 \le p \le 10^9pp 是素数)。

保证所有测试用例的 nn 之和不超过 100100kk 之和不超过 500500


输出
对于每个测试用例,输出一行一个整数:恰好执行 kkadd 操作所能产生的不同确定性最大堆的数量,对 pp 取模。


示例

输入

6  
2 1 998244353  
3 2 998244853  
3 3 998244353  
3 4 100000037  
4 2 100000039  
4 3 100000037  

输出

2  
12  
40  
100  
32  
224  

输入

1  
100 500 100000037  

输出

66681128  

输入

2  
87 63 100000037  
13 437 100000039  

输出

83566569  
54517140  

说明
对于第一个测试用例:

  • 如果选择 v=1v = 1 执行 add 操作,得到 a=[1,0,0]a = [1, 0, 0],由于 a2=a3a_2 = a_3,第一次 pop 操作时可以选择任意一个子节点,因此该堆不是确定性最大堆。
  • 如果选择 v=2v = 2,得到 a=[1,1,0]a = [1, 1, 0]
    • 第一次 pop
      • 初始 v=1v = 1a2>a3a_2 > a_3,选择 x=2x = 2a1:=a2=1a_1 := a_2 = 1v:=2v := 2a2:=1a_2 := -1a=[1,1,0]a = [1, -1, 0]
    • 第二次 pop
      • 初始 v=1v = 1a2<a3a_2 < a_3,选择 x=3x = 3a1:=a3=0a_1 := a_3 = 0v:=3v := 3a3:=1a_3 := -1a=[0,1,1]a = [0, -1, -1]
    • 第一次和第二次 pop 都是确定性的,所以这是确定性最大堆。
  • 同样,选择 v=3v = 3 也会得到一个确定性最大堆。
  • 因此答案是 22