#P10363. [PA 2024] Monety

[PA 2024] Monety

背景

PA 2024 5A2

题目描述

题目译自 PA 2024 Runda 5 Monety

Natalia 和 Cezary 喜欢玩游戏,尤其是他们自己发明的游戏。他们决定在自己面前放置一些堆硬币,硬币从上到下排成类似栈的样子,每堆有 mm 枚硬币,每枚硬币要么是蓝色的,要么是红色的。轮到 Natalia 时,她可以选择一枚蓝色硬币,并将其连同其上方的所有硬币一起从硬币堆中移除。同样,在轮到 Cezary 时,他可以选择一枚红色硬币,并将其连同其上方的所有硬币一起从硬币堆中移除。 玩家将轮流操作,不能采取合法操作的玩家就输了——也就是说,当一位玩家操作的所有硬币都已被移除时。

现在他们知道了规则,他们必须确定游戏的初始状态——dd 堆硬币,每堆恰好包含 mm 个硬币。Natalia 和 Cezary 都不希望拥有不公平的优势,因此他们一致认为硬币的顺序应该是公平的。假设 Natalia 和 Cezary 都采取最优策略,后手赢得游戏,则称初始状态是公平的。因此,如果 Natalia 先手,则采用最优策略的 Cezary 将获胜,反之亦然:如果 Cezary 先手,Natalia 将获胜。

两人已经摆好了前 kk 堆 mm 个硬币。现在他们正在思考如何完成这一系列硬币堆。他们已经得出结论,游戏中拥有超过 nn 堆硬币是没有意义的。

帮助他们,对于区间 [k,n][k, n] 中的每个整数 dd,告诉他们有多少种不同的由 dd 堆 mm 枚硬币组成的公平初始状态,这些初始状态从他们已经摆好的硬币堆开始。如果存在 i∈[1,d]i\in [1, d] 和 j∈[1,m]j\in [1, m],当第 ii 堆中的第 jj 个硬币在一种排列方式中为蓝色,在另一种为红色,则认为这两个初始排列方式是不同的。

由于答案可能很大,输出答案对 109+710^9+7 取模后的值即可。

输入格式

第一行三个整数 n,mn,m 和 k (1≤n≤32,1≤m≤24,0≤k≤n)k\ (1\le n\le 32,1\le m\le 24,0\le k\le n),分别表示硬币堆的最大值,每堆中硬币个数和已经摆好的硬币堆数。

接下来 kk 行描述已经摆好的硬币堆,第 ii 行包含一个仅由 N 和 C 组成且长度为 mm 的字符串,表示从底部起第 ii 堆硬币的摆放方式。如果第 jj 个字符为 N,则第 ii 堆硬币自底向上数第 jj 个硬币为蓝色,否则,这个字符为 C,表示硬币为红色。

输出格式

输出一行 n−k+1n-k+1 个整数,第 ii 个整数表示再摆 i−1i-1 堆硬币,以满足最终摆放方式是公平的最终摆放方式数。输出对 109+710^9+7 取模。

3 3 1
CCN

0 1 3

2 1 0

1 0 2

4 2 4
CN
NC
CC
NN

1

提示

对于第一组样例,如果我们不添加任何硬币堆,则最初局面不是公平的。然而,我们可以加一堆排列为 NNC 的硬币——这样两堆硬币的初始状态就是公平的了。我们可以以三种方式添加两堆硬币:[CCN, NNN],[NNN, CCN] 和 [NCN, NCN]。

数据范围与提示

  • 在某些子任务中,满足 k=nk=n。
  • 在某些子任务中,满足 n≤8,m≤8n\le 8,m\le 8​。
  • 在某些子任务中,满足 n≤12,m≤13n\le 12,m\le 13。
  • 在某些子任务中,满足 n≤16,m≤19n\le 16,m\le 19​。

上述每个子任务至少描述了之前子任务中没有出现的一组。