时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld
题目描述
钟楼里的光线又暗,台阶在眼前一层层模糊成影。雨声贴着墙壁回响,她只好微微眯起眼,小步试探着往下走。他放慢了脚步,两人间的空隙被悄然填补。她看不清路,却更靠近了他一点,像是撞进了一段不可言说的心事。钟声沉沉回荡,空气里满是潮湿的安静,隐秘的情绪却已酝酿,被悉数读懂。
他们一共走下了

级台阶。每一级台阶上的脚步声、雨声与钟声交织在一起,形成一个下标从

开始的长度为

的小写字母字符串

。
为了描述钟楼中的回声,记

中第

个字符到第

个字符构成的子串为
![S[l,r]](https://www.nowcoder.com/equation?tex=S%5Bl%2Cr%5D)
,记前缀
![P_x = S[1, x]](https://www.nowcoder.com/equation?tex=P_x%20%3D%20S%5B1%2C%20x%5D)
。
定义函数
)
表示

的最长影子长度:
![\lambda(x)=\max\{y \mid 0 \le y < x,\ S[1, y] = S[x-y+1, x]\}](https://www.nowcoder.com/equation?tex=%5Clambda(x)%3D%5Cmax%5C%7By%20%5Cmid%200%20%5Cle%20y%20%3C%20x%2C%5C%20S%5B1%2C%20y%5D%20%3D%20S%5Bx-y%2B1%2C%20x%5D%5C%7D)
即
)
为最大的小于

的非负整数

满足
![S[1,y]=S[x-y+1,x]](https://www.nowcoder.com/equation?tex=S%5B1%2Cy%5D%3DS%5Bx-y%2B1%2Cx%5D)
。特别地,若不存在

满足条件,则
%3D0)
。
再定义函数
)
表示

的回声阶数:
%20%3D%0A%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%0A0%2C%20%26%20x%3D0%20%5C%5C%0A0%2C%20%26%20%5Clambda(x)%3D0%20%5C%5C%0A0%2C%20%26%202%5Clambda(x)%3Cx%20%5C%5C%0A%5Crho(%5Clambda(x))%2B1%2C%20%26%20%5Cmathrm%7Belse%7D%0A%5Cend%7Bmatrix%7D%5Cright.)
即

或
%3D0)
或
%3Cx)
时
%3D0)
,否则
%3D%5Crho(%5Clambda(x))%2B1)
。
也就是说,只有当一个前缀的最长影子至少覆盖自身一半时,这段影子才足够清晰,可以继续向更深处回响。
现在你需要将整个字符串

划分成若干个非空连续片段:

一次划分被称为合法,当且仅当每个片段

都满足:
1. 存在某个整数长度

满足

,使得

,即每段是一个原串

的前缀。
2. 该长度的回声阶数不少于

,即
%20%5Cge%20k)
。
请计算合法划分方案数。由于答案可能很大,请输出答案对

取模后的结果。
输入描述:
第一行一个整数
,表示数据组数。
对于每组数据,第一行两个整数
。
第二行一个长度为
的仅包含小写英文字母的字符串
。
保证单个测试点内所有数据中
的和不超过
。
输出描述:
对于每组数据,输出一行一个整数,表示合法划分方案数对
取模后的结果。
示例1
输入
复制
3
5 0
ababa
4 1
aaaa
4 2
aaaa