#C1020. 教我KMP

教我KMP

教我KMP

题目描述

小 R 老师最近在给同学们讲 KMP。

但是讲着讲着,小 R 老师突然发现:自己好像也不是很会 KMP。

小 R 老师坚信,机房里的同学们都是字符串大师。哪怕原串已经灰飞烟灭,只剩下一串神秘的 KMP 前缀函数,同学们也一定能把可能的原串数量全部数出来。

为了掩盖自己不会 KMP 这件事,小 R 老师拿出了一台神秘的字符串机器。对于任意一个字符串 SS,这台机器都可以输出它的 KMP 前缀函数。

对于一个长度为 nn 的字符串 S=s1s2snS=s_1s_2\ldots s_n,定义 fif_i 表示 SS 的前缀 S[1,i]S[1,i] 的最长真 border 长度。也就是说,fif_i 是最大的整数 jj,满足:

0j<i0\le j<i

s1s2sj=sij+1sij+2sis_1s_2\ldots s_j=s_{i-j+1}s_{i-j+2}\ldots s_i。

特别地,若不存在非空真 border,则 fi=0f_i=0

现在,小 R 老师不小心把原来的字符串 SS 弄丢了,只留下了这台机器输出的 f2,f3,,fnf_2,f_3,\ldots,f_n

给定一个字符集大小 cc,也就是说每个字符都可以从 cc 种不同字符中选择。小 R 老师想知道:有多少个长度为 nn 的字符串 SS,能够让这台机器输出恰好为给定的 KMP 前缀函数序列?

由于答案可能很大,请输出答案对 109+710^9+7 取模后的结果。

题目保证给定的 KMP 前缀函数序列至少对应一个合法字符串。

输入格式

第一行包含两个整数 n,cn,c,分别表示字符串长度和字符集大小。

第二行包含 n1n-1 个整数 f2,f3,,fnf_2,f_3,\ldots,f_n,表示给定的 KMP 前缀函数。

输出格式

输出一个整数,表示满足条件的字符串数量对 109+710^9+7 取模后的结果。

样例 1 输入

3 3
0 0

样例 1 输出

12

样例 1 解释

设字符串为 s1s2s3s_1s_2s_3

由于 f2=0f_2=0,所以必须有:

s2s1s_2\ne s_1。

由于 f3=0f_3=0,所以必须有:

s3s1s_3\ne s_1。

因此,s1s_133 种选择,s2s_222 种选择,s3s_322 种选择。

所以答案为:

3×2×2=123\times 2\times 2=12。

样例 2 输入

5 1000000000
1 2 3 4

样例 2 输出

1000000000

样例 2 解释

给定的前缀函数表示:

f2=1,f3=2,f4=3,f5=4f_2=1,\quad f_3=2,\quad f_4=3,\quad f_5=4。

因此每个位置都必须与前一个位置保持连续匹配,整个字符串只能由同一种字符组成。

第一个字符有 10910^9 种选择,所以答案为 10910^9

样例 3

见选手目录下的 kmp/kmp3.inkmp/kmp3.ans

该样例满足测试点 1121\sim 12 的约束条件。

样例 4

见选手目录下的 kmp/kmp4.inkmp/kmp4.ans

该样例满足测试点 1121\sim 12 的约束条件。

样例 5

见选手目录下的 kmp/kmp5.inkmp/kmp5.ans

该样例满足测试点 213221\sim 32 的约束条件。

样例 6

见选手目录下的 kmp/kmp6.inkmp/kmp6.ans

该样例满足测试点 336433\sim 64 的约束条件。

样例 7

见选手目录下的 kmp/kmp7.inkmp/kmp7.ans

该样例满足测试点 336433\sim 64 的约束条件。

样例 8

见选手目录下的 kmp/kmp8.inkmp/kmp8.ans

该样例满足测试点 6510065\sim 100 的约束条件。

样例 9

见选手目录下的 kmp/kmp9.inkmp/kmp9.ans

该样例满足测试点 6510065\sim 100 的约束条件。

数据范围

对于所有测试数据,均满足:

  • 2n1062\le n\le 10^6
  • 1c1091\le c\le 10^9
  • 对于所有 2in2\le i\le n,有 0fi<i0\le f_i<i
  • 题目保证给定的 f2,f3,,fnf_2,f_3,\ldots,f_n 至少对应一个合法字符串。

本题共 100100 个测试点,每个测试点 11 分。

测试点编号 分值 约束条件
1121\sim 12 1212 n13, c3n\le 13,\ c\le 3
132013\sim 20 88 对所有 i2i\ge 2,均有 fi=i1f_i=i-1
213221\sim 32 1212 对所有 i2i\ge 2,均有 fi=0f_i=0
336433\sim 64 3232 n3000n\le 3000
6510065\sim 100 3636 无额外限制