#N1U21P01. 子串编码值

子串编码值

子串编码值

难度:T4

【知识点:字符串哈希】

前置知识:字符串哈希及其冻结前置单元。

题目描述与输入

输入非空小写串ss、查询数qq,再输入qq行ll、rr,为00起点半开区间。编码a=1..z=26a=1..z=26,B=131B=131,M=1000000007M=1000000007。

规则说明

半开区间 [l,r)[l,r) 包含位置 ll,不包含位置 rr,下标从 00 开始。设截取的子串依次对应整数 c1,c2,…,ckc_1,c_2,\ldots,c_k,本题编码值规定为 (c1Bk−1+c2Bk−2+⋯+ck) mod M(c_1B^{k-1}+c_2B^{k-2}+\cdots+c_k)\bmod M,取非负余数。例如 ab 编码为 1×131+2=1331\times131+2=133。每次截取后都按子串自身的长度编码。

输出

每问输出对应子串的多项式哈希值。

数据范围

11<=|ss|<=20002000;11<=q<=2000q<=2000;00<=l<rl<r<=|ss|;第二组区间同样合法。

样例输入

abac
3
0 2
1 3
0 4

样例输出

133
263
2282547

样例说明

前缀多项式与幂表均预处理,截取时减掉对齐前缀。请按输入操作顺序逐步核对;没有规定输出的更新操作不输出额外内容。