#P11127. [PA 2025]Podciągi子序列

[PA 2025]Podciągi子序列

题目描述

你有一个长度为 nn 的字符串 ss,由字母集 $\{\texttt{a}, \texttt{b}, \texttt{c}, \texttt{d}, \texttt{e}, \texttt{f}\}$ 组成。接下来会对它进行 qq 次操作,每次操作是替换字符串中的一个字母。

考虑字符串 ss 的所有子序列集合 XsX_{s},也就是通过删除某些字母后得到的所有可能字符串(多重集)。

你的任务是跟踪一个信息:在 XsX_{s} 中,有多少不同的非空字符串 tt 至少出现了两次。

比如,对于字符串 ababa\texttt{ababa},有 66 个这样的字符串 tt

  • 字符串 a\texttt{a}XsX_{s} 中出现 33 次。
  • 字符串 b\texttt{b}XsX_{s} 中出现 22 次。
  • 字符串 ab\texttt{ab}XsX_{s} 中出现 33 次(分别删去位置 3,4,53,4,52,3,52,3,51,2,51,2,5 的字母)。
  • 字符串 ba\texttt{ba}XsX_{s} 中出现 33 次(分别删去位置 1,4,51,4,51,3,41,3,41,2,31,2,3 的字母)。
  • 字符串 aa\texttt{aa}XsX_{s} 中出现 33 次(分别删去位置 2,4,52,4,52,3,42,3,41,2,41,2,4 的字母)。
  • 字符串 aba\texttt{aba}XsX_{s} 中出现 44 次(分别删去位置 4,54,53,43,42,32,31,21,2 的字母)。

请你算出初始字符串 ss 以及每次操作后 ssXsX_{s} 中符合条件的字符串 tt 的数量。因为这些数字可能很大,输出它们对 998244353998244353 取模的结果。

输入格式

输入的第一行包含两个整数 nnqq (3n50000,0q50000)(3 \leq n \leq 50000, 0 \leq q \leq 50000),分别表示字符串长度和操作次数。

第二行是一个长度为 nn 的字符串,仅由小写字母 a\texttt{a}f\texttt{f} 组成。

接下来的 qq 行描述操作,每行包含一个整数 pip_{i} (1pin)(1 \leq p_{i} \leq n) 和一个字母 ziz_{i} $(z_{i} \in \{\texttt{a}, \texttt{b}, \texttt{c}, \texttt{d}, \texttt{e}, \texttt{f}\})$,表示将 ss 中第 pip_{i} 位置的字母替换为 ziz_{i}

输出格式

输出 q+1q+1 行,每行一个整数。第 ii 行表示初始状态或前 i1i-1 次操作后的 ss 中,XsX_{s} 内至少出现两次的不同字符串 tt 的数量,结果对 998244353998244353 取模。

4 3
abca
1 a
4 d
2 c

1
1
0
4

以下是字符串 ss 在每次更新后的状态,以及作为 ss 子序列至少出现两次的字符串 tt

  • 字符串:abca\texttt{abca},子序列:{a}\{\texttt{a}\}
  • 字符串:abca\texttt{abca},子序列:{a}\{\texttt{a}\}
  • 字符串:abcd\texttt{abcd},子序列:{}\{\}
  • 字符串:accd\texttt{accd},子序列:{ac, acd, cd, c}\{\texttt{ac, acd, cd, c}\}