C0652 [TJOI2018]party

内存限制:256 MB 时间限制:6000 ms

题目描述

小豆参加了 NOI 的游园会,会场上每完成一个项目就会获得一个奖章,奖章只会是 N, O, I 的字样。

在会场上他收集到了 $K$ 个奖章组成的串。兑奖规则是奖章串和兑奖串的最长公共子序列长度为小豆最后奖励的等级。

现在已知兑奖串长度为 $N$,并且在兑奖串上不会出现连续三个奖章为NOI,即奖章中不会出现子串NOI

现在小豆想知道各个奖励等级会对应多少个不同的合法兑奖串。

输入格式

第一行两个数 $N$,$K$ 分别代表兑奖串的长度,小豆收集的奖章串的长度。

第二行一共 $K$ 个字符,表示小豆得到奖章串。

输出

一共 $K+1$ 行,第 $i$ 行表示小豆最后奖励等级为 $i-1$ 的不同的合法兑奖串的个数,可能这个数会很大,结果对 $10^9 + 7$ 取模。

样例

样例输入 1

3 2 NO

样例输出 1

1 19 6

提示

【样例解释】

最长公共子序列长度 $0$ 的串有:III;

最长公共子序列长度 $2$ 的串有:NON,NNO,NOO,ONO,INO,NIO;

除去`NOI`,余下的 $19(26-6-1)$ 种为最长公共子序列长度为 $1$。

【数据规模】

对于 $10\%$ 的数据,$N \leq 10 , K \leq 10$。

对于 $30\%$ 的数据,$N \leq 100 , K \leq 4$。

对于 $100\%$ 的数据,$N \leq 1000 , K \leq 15$。