CF2048I2 Kevin and Puzzle (Hard Version)

题目描述

这是此题目的困难版本,两个版本的区别在于在这个版本中,你需要计算出所有“好数组”的数量。只有在解决了所有版本的问题后,才可以进行 hack。 Kevin 在参观红教堂时发现了一道墙上的谜题。 对于一个数组 $a$,令 $c(l, r)$ 表示数组 $a$ 从位置 $l$ 到 $r$ 的所有元素中,不同数字的个数。特别地,当 $l > r$ 时,定义 $c(l, r) = 0$。 现给定一个长度为 $n$ 的字符串 $s$,该字符串仅由字母 $\texttt{L}$ 和 $\texttt{R}$ 组成。将一个非负整数数组 $a$ 称为“好数组”,如果对于每个 $1 \leq i \leq n$ 满足以下条件: - 若 $s_i = \verb!L!$,则 $c(1, i-1) = a_i$; - 若 $s_i = \verb!R!$,则 $c(i+1, n) = a_i$。 你的任务是计算这样的“好数组” $a$ 的数量。由于结果可能会非常大,输出结果时只需对 $998\,244\,353$ 取模。

输入格式

输入包含多组测试用例。 第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。 每个测试用例中: - 第一行包含一个整数 $n$($2 \leq n \leq 2 \cdot 10^5$),表示字符串 $s$ 的长度。 - 第二行是一个长度为 $n$ 的字符串 $s$,由字母 $\verb!L!$ 和 $\verb!R!$ 组成。 并且,所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出“好数组”的数量,并对 $998\,244\,353$ 取模。 **本翻译由 AI 自动生成**

说明/提示

All arrays satisfying the conditions can be found in the easy version of this problem.