9542: 小塔的字符串

内存限制:1024 MB 时间限制:4 S
题面:传统 评测方式:文本比较 上传者:
提交:3 通过:0

题目描述

小塔是一位热衷于字符串研究的学者。最近她在研究字符串的前缀border特性时遇到了一个有趣的问题:给定一个字符串和多个查询,每个查询给出两个前缀,需要计算这两个前缀的所有公共border长度的两两异或平方和。这可以帮助她分析字符串前缀之间的相似性特征。

给定一个长度为nn的字符串SS,和mm次询问。每次询问给出两个前缀SpSpSqSq即字符串SS的前pp个和前qq个字符,要求:

  1. 找出SpSpSqSq的所有公共border长度。其中一个长度xx是字符串的border当且仅当长度为xx的前缀和长度为xx的后缀相同(其中border长度需要小于原字符串的长度)。
  2. 计算这些公共border长度两两异或的平方和

数学表达式为:∑x∈Bp∩Bq∑y∈Bp∩Bq(x⊕y)2xBpBqyBpBq(xy)2其中BkBk表示SkSk的所有border长度集合,表示按位异或运算。

输入格式

第一行包含整数TT,表示测试数据组数。

每组数据包含:

  • 第一行两个整数n,mn,m
  • 第二行一个字符串SS,仅包含小写字母
  • 接下来mm行,每行两个整数p,qp,q

数据范围:

  • 1≤T≤51T5
  • 1≤n,m≤1051n,m105
  • ∑n≤5×105n5×105
  • ∑m≤5×105m5×105
  • 1≤p,q≤n1p,qn

输出格式

对于每组数据的每个询问,输出一行包含所求的异或平方和。

输入样例 复制

1
10 2
aaaabbaaaa
4 10
8 9

输出样例 复制

28
18