AT_arc089_d [ARC089F] ColoringBalls
题目描述
有 $N$ 个编号为 $1,2,...,N$ 的白球按顺序排成一行。AtCoDeer 君想用红色和蓝色给这些球染色。最终,可能还会有部分球保持白色。
给定一个长度为 $K$ 的字符串 $s$。AtCoDeer 君将对 $i=1$ 到 $i=K$ 依次进行如下操作:
- 第 $i$ 次操作:选择一段连续的球区间(可以为空),如果 $s$ 的第 $i$ 个字符为 `r`,则用红色染色;如果为 `b`,则用蓝色染色。
注意,如果对已染色的球再次染色,则会覆盖原有的颜色。另外,由于染料的限制,**尚未被染色的白球不能直接用蓝色染色**。即,当 $s$ 的第 $i$ 个字符为 `b` 时,不能选择包含白球的区间。
所有操作结束后,问可能得到多少种不同的球颜色排列。由于答案可能很大,请输出对 $10^9+7$ 取模的结果。
输入格式
输入通过标准输入给出,格式如下:
> $N$ $K$ $s$
输出格式
请输出所有操作结束后可能得到的球颜色排列数量,对 $10^9+7$ 取模。
说明/提示
### 限制条件
- $1 \leq N \leq 70$
- $1 \leq K \leq 70$
- $|s| = K$
- $s$ 仅由 `r` 和 `b` 组成
- $N,K$ 均为整数
### 样例解释 1
若用 `r` 表示红色,`b` 表示蓝色,`w` 表示白色,则最终可能出现的球颜色排列有以下 $9$ 种:`ww`, `wr`, `rw`, `rr`, `wb`, `bw`, `bb`, `rb`, `br`
### 样例解释 2
由于不能直接将白球染成蓝色,所以第一次操作只能选择空区间。
由 ChatGPT 5 翻译