随风飘
题号:NC19249
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小A和小萌玩游戏。
小A手里有N个纸条,每个纸条上写着一句话,这句话用字符串加密了。。。
由于天气等不可控原因,小A的纸条随风飘走了k个。
无奈,小A和小萌只好在剩下的纸条中选择了。
小A和小萌每个人随机拿一个纸条,每个人都将纸条写成金字塔的模样。
例如:
小A拿到了abcd,他会写成:
              a
         a        b
    a        b        c
a       b        c        d
小萌拿到了abc,他会写成
         a
    a        b
a       b        c
发现到第四层两个金字塔就不一样了,所以这两个的纸条的贡献就是3.
现在小A和小萌玩的没意思了,但是他们还是很想知道对于所有的情况,纸条的贡献之和是多少。
不同的情况代表任何一步的操作不同。
答案对1000000007取模。

输入描述:

第一行两个整数N和Q。

接下来N行,每行一个字符串S。

接下来Q行,每行一个k,表示吹走了k个。

输出描述:

Q行,表示答案。
示例1

输入

复制
4 2
abcd
abc
ab
a
2
1

输出

复制
10
20

说明

保证输入字符均为小写字母。

备注:

N<=4000,Q<=200,|S|<=3000000,k<=300.