AT_jsc2019_qual_c Cell Inversion

题目描述

有 $2N$ 个格子从左到右排成一行,给定一个长度为 $2N$ 的字符串 $S$,表示每个格子的颜色。 从左起第 $i$ 个格子的颜色由 $S$ 的第 $i$ 个字符决定,如果是 `B`,则为黑色,如果是 `W`,则为白色。 你需要进行恰好 $N$ 次操作。每次操作选择两个不同的格子,将这两个格子及它们之间所有格子的颜色全部反转(黑变白,白变黑)。 在所有操作过程中,每个格子只能被选择一次,也就是说,每个格子恰好被选中一次。 请计算,经过 $N$ 次操作后,所有格子都变成白色的方案数。答案对 $10^9+7$ 取模。如果不存在这样的方案,请输出 $0$。 这里,如果存在某个 $i$ $(1 \leq i \leq N)$,第 $i$ 次操作所选的两个格子的组合不同,则认为两种方案不同。

输入格式

输入从标准输入读入,格式如下: > $N$ $S$

输出格式

输出经过 $N$ 次操作后所有格子都变成白色的方案数,对 $10^9+7$ 取模。如果不存在这样的方案,则输出 $0$。

说明/提示

### 限制条件 - $1 \leq N \leq 10^5$ - $|S| = 2N$ - $S$ 的每个字符都是 `B` 或 `W`。 ### 样例解释 1 将所有格子变成白色的方案有如下 $4$ 种: - 第一次操作选择第 $1$ 和第 $3$ 个格子,第二次操作选择第 $2$ 和第 $4$ 个格子。 - 第一次操作选择第 $2$ 和第 $4$ 个格子,第二次操作选择第 $1$ 和第 $3$ 个格子。 - 第一次操作选择第 $1$ 和第 $4$ 个格子,第二次操作选择第 $2$ 和第 $3$ 个格子。 - 第一次操作选择第 $2$ 和第 $3$ 个格子,第二次操作选择第 $1$ 和第 $4$ 个格子。 由 ChatGPT 4.1 翻译