#P6841. [BalkanOI 2009] Reading
[BalkanOI 2009] Reading
题目背景
题目描述
有一个关于人脑有趣的事实:在阅读时,它主要分析每个单词的第一个和最后一个字母,而不一定要按照正确的顺序来构造单词。因此,即使一句话基本上没有正确的单词,也可能会被正确的理解。(原文中这段文字的部分单词的字母顺序被打乱,但是译者认为这样会影响阅读,因此没有改变翻译中文字的顺序)
Elly 已经注意到,打乱某些字母会得到更好的结果!例如,字母 l 和 i、a 和 o、x 和 m 非常相似。于是她定义了一个字母的值,从 到 。其中,相似的字母的值较低,而非常不同的字母值较高。等号字母的值是 。通过这种方式,每个单词可以被赋予一个值——相邻字母之间所有值的总和。
想象一下,她把 e 和 l 的值定义为 ,l 和 y 的值定义为 ,i 和 l 的值定义为 。那么单词 elly 的值是 (记住,相邻的相等字母的距离是 )。单词 lily 的值为 ,而 i 的值为 )。长单词的价值不一定比短单词大——比如 lilii(保加利亚语中lily 的复数形式)——它的值只有 ,但 elle(法语中的意思是 she)的价值是 。但是,每增加一个字母,至少会增加一个单词的值。
Ellenora 希望构建一种即使有大量混乱的字母也很容易阅读的语言。求出值不大于 的所有非空单词数目。
输入格式
从标准输入读入。
第一行两个整数 和 ,表示单词的值的最大值()和字符对的数量。Elly 已经定义了一个值。所有未提及的字母对的距离都等于 。接下来的 行中的每一行都包含一个三元组 ,这意味着字母 之间的距离为 。从 到 的距离与从 到 的距离相同,即距离是无序的。
输出格式
输出到标准输出。
一行,一个整数,表示由小写英文字母组成的单词数,满足它的值不大于 。因为这个数量可能非常大,所以你只需要输出它对 取模后的结果。
20 10
e l 3
e o 1
o n 2
o r 4
r a 4
i n 5
e n 2
n t 3
t w 3
w i 5
470059518
提示
数据范围
对于 的数据,。
对于全部数据,,每一对字母最多只会出现一次。
样例解释
一些可行的单词有:elleonora、entwine、aaaaaaaaaaaaaaaaaaaaa。