#P5287. [HNOI2019] JOJO

[HNOI2019] JOJO

题目背景

JOJO 的奇幻冒险是一部非常火的漫画。漫画中的男主角经常喜欢连续喊很多的 “欧拉” 或者 “木大”。

题目描述

为了防止字太多挡住漫画内容,现在打算在新的漫画中用 xx 欧拉或者 xx 木大表示有 xx 个欧拉或者木大。

为了简化内容我们现在用字母表示喊出的话。

我们用数字和字母来表示一个串,例如 2 a 3 b 表示的串就是 aabbbaabbb

一开始漫画中什么话都没有,接下来你需要依次实现 nn 个操作,总共只有 22 种操作:

  • 第一种:1 x c 在当前漫画中加入 xxcc,表示在当前串末尾加入 xxcc 字符。保证当前串是空串或者串尾字符不是 cc
  • 第二种:2 x 觉得漫画没画好将漫画还原到第 xx 次操作以后的样子,表示将串复原到第 xx 次操作后的样子,如果 x=0x=0 则是将串变成空串。

如果当前串是 bbaabbbbbaabbb,第 44 次操作后串是 bbbb,则 2 4 会使 bbaabbbbbaabbb 变成 bbbb,保证 xx 小于当前操作数。

众所周知空条承太郎十分聪明,现在迪奥已经被打败了,他开始考虑自己的漫画中的一些问题:

对于一个串的每个前缀 AA,都有一个最长的比它短的前缀 BB 与前缀 AA 的一个后缀匹配,设这个最长的前缀 BB 的长度为 LLLL00 时意味着 BB 是一个空串。

每一次操作后,你都需要将当前的串的所有前缀的 LL 求和并对 998244353998244353 取模输出告诉空条承太郎,好和他的白金之星算出的答案对比。

比如 bbaaabbabbaaabbaLL 分别是 0,1,0,0,0,1,2,30, 1, 0, 0, 0, 1, 2, 3,所以对于这个串的答案就是 77

输入格式

第一行包括一个正整数 nn,表示操作数量。

接下来 nn 行每行包含一个操作,操作格式如题面所示,例如

  • 1 x c
  • 2 x

保证数据合法。

输出格式

输出文件仅包含 nn 行,第 ii 行一个整数,表示 ii 个操作之后串的答案。

11
1 2 a
1 3 b
1 2 a
1 1 b
2 2
1 3 a
1 2 b
2 6
2 5
1 7 a
1 5 c

1
1
4
7
1
6
13
6
1
14
14

提示

样例解释

操作 此时的串 答案
11 aa 0+1=10+1=1
22 aabbb 0+1+0+0+0=10+1+0+0+0=1
33 aabbbaa 0+1+0+0+0+1+2=40+1+0+0+0+1+2=4
44 aabbbaab 0+1+0+0+0+1+2+3=70+1+0+0+0+1+2+3=7
55 aabbb 0+1+0+0+0=10+1+0+0+0=1
66 aabbbaaa 0+1+0+0+0+1+2+2=60+1+0+0+0+1+2+2=6
77 aabbbaaabb 0+1+0+0+0+1+2+2+3+4=130+1+0+0+0+1+2+2+3+4=13
88 aabbbaaa 0+1+0+0+0+1+2+2=60+1+0+0+0+1+2+2=6
99 aabbb 0+1+0+0+0=10+1+0+0+0=1
1010 aabbbaaaaaaa 0+1+0+0+0+1+2+2+2+2+2+2=140+1+0+0+0+1+2+2+2+2+2+2=14
1111 aabbbaaaaaaaccccc 0+1+0+0+0+1+2+2+2+2+2+2+0+0+0+0+0=140+1+0+0+0+1+2+2+2+2+2+2+0+0+0+0+0=14

数据范围

20%20\% 的数据满足 n300n\leq 300 且每个 11 操作中的 x300x\leq 300

另有 30%30\% 的数据满足 n105n\leq 10 ^ 5 且每个 11 操作中的 x=1x=1

另有 30%30\% 的数据满足 n105n\leq 10 ^ 5 且不含 22 操作;

100%100\% 的数据满足 n105n\leq 10 ^ 5 且每个 11 操作中的 x104x\leq 10 ^ 4