6700: 字符串

内存限制:512 MB 时间限制:6 S
题面:Markdown 评测方式:文本比较 上传者:
提交:5 通过:0

题目描述

给定由 a, b 两种小写字母组成的串 s s , 下标从 11开始。

定义 occ(t) occ(t) 表示字符串 t t s s 中出现的次数。

q q 次询问,每次询问有如下两种类型:

1. 操作1,给定 l,r l,r ,询问有多少本质不同的串 tt,满足 s[l,r] s[l,r] t t 的子串,且 occ(s[l,r])=occ(t) occ(s[l,r])=occ(t)

2. 操作2,给定 l,r l,r ,询问有多少本质不同的串 tt,满足 t t s[l,r] s[l,r] 的子串,且 occ(s[l,r])=occ(t) occ(s[l,r])=occ(t)

 

输入格式

第一行一个整数 t (1t5)t\ (1\le t\le 5) 代表数据组数。

对于每组数据:

第一行输入一个串 s (1s5×105)s\ (1\le |s|\le 5\times 10^5)

第二行一个整数 q (1q5×105)q\ (1\le q\le 5\times 10^5) 表示有 qq 次询问。

接下来 qq 行每行三个数 op,l0,r0 (opop,l_0,r_0\ (op\in {1,21,2},1l0,r0s),1\le l_0,r_0\le |s|),分别表示询问的类型和询问的区间 [l,r][l,r]

其中 l=(l0+lastans1)%s+1l=(l_0 + lastans - 1) \% |s| + 1,r=(r0+lastans1)%s+1r=(r_0 + lastans - 1) \% |s| + 1,保证1lrs1\le l\le r\le |s|

lastanslastans代表上一次询问的答案,特别的对于每组数据的第一次询问时lastans=0lastans=0

保证所有测试数据 s5×105,q5×105\sum |s|\le5\times 10^5,\sum q\le5\times 10^5

输出格式

对于每组数据输出 qq 行,每行一个整数表示每个询问的答案。

输入样例 复制

1
ababbab
10
2 1 3
2 2 3
1 7 1
2 2 5
2 1 1
1 2 4
2 1 3
2 6 3
2 4 4
1 7 1

输出样例 复制

1
2
2
3
1
9
2
6
1
1