#370. [R59E]01序列

[R59E]01序列

时空限制

1S/512M

题目描述

定义一个 01 字符串的权值为其中 0110 子序列^{\dagger} 的数量。

现在给定一个长度为 nn 的 01 字符串 SS,请你求出 SS 的所有连续子串的权值之和。

由于答案可能非常大,请将最终结果对 998244353998244353 取模后输出。

^{\dagger}:子序列是指从原字符串中删除若干个(可以不删)字符,剩余字符按照原有顺序拼接而成的字符串。例如 011001010 的子序列,但不是连续子串。

格式

输入格式

第一行包含一个整数 nn,表示字符串长度。

第二行包含一个长度为 nn、且仅由字符 01 组成的字符串 SS

输出格式

第一行输出一个整数,表示 SS 的所有连续子串的权值之和对 998244353998244353 取模后的结果。

样例

样例输入 #1

5
01100

样例输出 #1

3

样例解释 #1

字符串 01100 的所有连续子串中,只有以下子串包含 0110 子序列:

  • 子串 S[14]=S[1 \dots 4] = 0110:包含 110110 子序列。
  • 子串 S[15]=S[1 \dots 5] = 01100:包含 220110 子序列(分别为原串中下标为 {1,2,3,4}\{1, 2, 3, 4\}{1,2,3,5}\{1, 2, 3, 5\} 的字符组成的序列)。

其他所有的子串(如 0111100 等)权值均为 00。 因此,所有子串的权值之和为 1+2=31 + 2 = 3

数据规模

注意:你只有通过了子任务的所有测试点,才能获得对应子任务的分数。

子任务编号 分数 nn\le
11 3030 20002000
22 7070 2×1052\times 10^5

对于 100%100\% 的数据,4n2×1054 \le n \le 2 \times 10 ^5,字符串 SS 仅包含字符 01