Biljana 喜欢制作填字游戏。她最喜欢的类型是所谓的“变位词填字游戏”(anagram crossword),其中每个线索都是所需答案的变位词。
她有一组 $n$ 个单词,她认为这些单词是她下一个谜题的候选词。如果一个单词可以通过重新排列字母得到另一个单词(即它们是变位词),我们称这两个单词是相似的。
她希望从这些单词中选择一个子集,使得该子集中恰好有 $k$ 对相似的单词。帮助 Biljana 确定满足条件的子集数量。
输入格式
第一行包含整数 $n$ ($1 \le n \le 2000$) 和 $k$ ($0 \le k \le 2000$),分别表示单词的数量和要求的相似单词对数。
接下来的 $n$ 行,每行包含一个最多由 10 个小写字母组成的单词。所有单词都是互不相同的。
输出格式
输出满足条件的子集数量模 $10^9 + 7$ 的结果。
子任务
| 子任务 | 分数 | 约束条件 |
|---|---|---|
| 1 | 10 | $1 \le n \le 15$ |
| 2 | 30 | $0 \le k \le 3$ |
| 3 | 70 | 无附加限制。 |
样例
输入格式 1
3 1 ovo ono voo
输出格式 1
2
输入格式 2
5 2 trava vatra vrata leo ole
输出格式 2
3
输入格式 3
6 3 mali lima imal je sve ej
输出格式 3
6
说明
样例 1 说明:
恰好包含一对相似单词的子集为 {ovo, ono, voo} 和 {ovo, voo}。