小 $L$ 在假期里需要每天背单词为出国留学做准备。他特地报了一个培训班,和小伙伴们在玩游戏的过程中背单词,寓学于乐。
这一天,老师提出了一个新的背单词的游戏。游戏开始前,老师先给出 $n$ 个新单词,然后让同学们努力记下来。一段时间过后,再让同学们快速地默写印象最深的 $k$ 个单词。由于短暂记忆记得不牢固,同学们默写的单词总是乱序的。
为了更好地激励同学们记单词,老师会给同学们分发糖果,糖果的颗数取决于同学写下的 $k$ 个单词连成的字符串在所有可能的字符串中从小到大排序后的排名(显然最多能组成 $n! / (n-k)!$ 个不同的字符串)。
小 $L$ 看了看老师给出的 $n$ 个单词,再看了看自己写下的 $k$ 个单词,想知道自己的能拿到多少糖果。
注明:提交语言有 C 和 C++ 两种,默认为 C,如果要使用 C++ 提交,请手动切换。
输入数据第一行包含两个整数,$n$ 和 $k(1 \le k \le n)$。
接下来 $n$ 行,每行包含一个字符串。表示老师从课本上选定的 $n$ 个单词。
最后一行包含一个长字符串,表示小 $L$ 默写的 $k$ 个单词拼接后形成的字符串。
数据保证单词全部由小写字母组成,且不存在某个单词是另一个单词的前缀。
所有单词的总长度不超过 $10^6$,单词个数 $n$ 的大小由单词总长度所限制。
输出仅一行包含一个整数,表示小 $L$ 得到的糖果数对 $10^9+7$ 取余后的结果。
对于 $20\% $ 的数据,输入文件大小小于 $1KB$
对于 $60\%$ 的数据,输入文件大小小于 $256KB$
对于 $100\%$ 的数据,输入文件大小小于 $2MB$
5 3 a b c d e cad
26