#P16703. 数

    ID: 15913 传统题 8000ms 1024MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>CF3100字符串动态规划组合数学后缀自动机

题目描述

对于一个字符串 SS,定义它的后缀自动机 S(S)\mathcal{S}(S) 为一个接受 SS 的所有后缀的最小确定有限自动机(DFA)。具体定义如下:

  • S(S)\mathcal{S}(S) 是一张有向无环图。图中的结点称为状态,有向边称为状态之间的转移
  • 图中存在一个源点 t0t_0,称为初始状态。从 t0t_0 出发可以到达其他所有状态。
  • 每条转移都标有一个字母。从同一个状态出发的所有转移所标记的字母两两不同。
  • 图中存在一个或多个终止状态。从初始状态 t0t_0 出发,如果最终到达一个终止状态,那么路径上所有转移的字母依次连接起来,一定构成字符串 SS 的一个后缀;同时,SS 的每个后缀都能够由一条从 t0t_0 到某个终止状态的路径构成。
  • 在所有满足上述条件的自动机中,S(S)\mathcal{S}(S) 的状态数最少。

定义 f(S)f(S) 为字符串 SS 对应的后缀自动机的状态数。例如:

$$f(\texttt{aa})=3,\qquad f(\texttt{ab})=3,\qquad f(\texttt{aab})=4,\qquad f(\texttt{abb})=5.$$

现在,对于所有长度为 nn、字符集为

Σ={1,2,,k}\Sigma=\{1,2,\ldots,k\}

的字符串 SS,求所有 f(S)f(S) 的总和。

由于答案可能很大,你只需要输出答案对给定整数 PP 取模后的结果。

输入格式

输入包含多组测试数据。

第一行包含两个正整数 T,PT,P,分别表示测试数据组数和模数。所有测试数据使用相同的模数 PP

接下来 TT 行,每行包含两个整数 n,kn,k,表示字符串长度和字符集大小。

输出格式

对于每组测试数据,输出一行一个整数,表示答案对 PP 取模后的结果。

样例

3 1000000007
2 2
3 2
3 3
12
34
114

数据范围

对于 100%100\% 的数据:

  • 1T1051\le T\le 10^5
  • 1kn401\le k\le n\le 40
  • 108P109+910^8\le P\le 10^9+9
  • 不保证 PP 为质数。

各子任务的限制如下:

子任务 分值 额外限制
11 55 n8n\le 8
22 1515 k=2k=2
33 1010 n16n\le 16
44 n24n\le 24
55 n28n\le 28
66 n32n\le 32
77 n34n\le 34
88 n36n\le 36
99 n38n\le 38
1010 n40n\le 40