题目描述
给定一个字符串 s,定义它的 k 前缀 prek 为字符串 s1…k,k 后缀 sufk 为字符串 s∣s∣−k+1…∣s∣,其中 1≤k≤∣s∣。
定义 Border(s) 为对于 i∈[1,∣s∣),满足 prei=sufi 的字符串 prei 的集合。Border(s) 中的每个元素都称之为字符串 s 的 border。
有 m 组询问,每组询问给定 p,q,求 s 的 p 前缀 和 q 前缀 的 最长公共 border 的长度。
输入格式
第一行一个字符串 s。
第二行一个整数 m。
接下来 m 行,每行两个整数 p,q。
输出格式
对于每组询问,一行一个整数,表示答案。若不存在公共 border,请输出 0。
aaaabbabbaa
5
2 4
7 10
3 4
1 2
4 11
1
1
2
0
2
zzaaccaazzccaacczz
3
2 18
10 18
3 5
1
2
0
提示
样例 2 说明:
对于第一个询问,2 前缀和 18 前缀分别是 zz
和 zzaaccaazzccaacczz
,由于 zz
只有一个 border,即 z
,故最长公共 border 长度为 1。
对于 16% 的数据,s 中的字符全部相等。
对于 100% 的数据,1≤p,q≤∣s∣≤106,1≤m≤105,si∈[a,z]。