#P0069. [模板] 回文子串

[模板] 回文子串

Description

模板——回文子串。
给定一个字符串 ss 以及 QQ 个操作。您需要编写一个程序以支持下列几种操作:

  • 在字符串 ss 的末尾添加一个字符串;
  • 在字符串 ss 的前端添加一个字符串的反序
  • 查询字符串 ss 的所有非空回文子串的数量。 ss 的两个子串视为不同,当且仅当这两个子串的长度不同或者这两个子串在 ss 中的起始位置不同。 ss 的反序字符串定义为将 ss 中前后对称位置的字符两两对调位置后形成的字符串。

Format

Input

输入文件第一行包含一个字符串 ss

输入文件第二行包含一个整数 QQ,表示操作的数量。

接下来 QQ 行,每行首先包含一个整数 opop,其含义如下所示:

  • 1:在字符串 ss 的末尾添加一个字符串;
  • 2:在字符串 ss 的前端添加一个字符串的 反序;
  • 3:查询字符串 ss 的所有非空回文子串的数量。 若 opop12,则接下来会给出一个字符串 tt,表示要在末尾或前端添加的字符串。

Output

对于每个 opop3的操作,分别在单独的一行上输出此时 ss 中非空回文子串的数量。

Samples

aaa
1
3
6
a
5
3
1 bba
3
2 ab
3
1
6
10

Limitation

对于 100%100\% 的测试数据,保证有:

初始时 0<s1050 < |s| \leq 10^50<Q1050 < Q \leq 10^50<t<10000 < |t| < 1000 且操作序列结束时有 0<s4×1050 < |s| \leq 4 \times 10^5