만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

회문

시간 제한2초메모리 제한512 MB

요약
문자열 s에서 주어진 시작 위치마다 길이 l인 부분 문자열을 이어 붙인 문자열에 나타나는 회문 부분 문자열의 개수를 구합니다.
난이도

어려움10점 중 9점

유형
문자열, 문자열 매칭, 수학
정답자
아직 제출이 없습니다

문제

회문(palindrome)은 앞에서 읽으나 뒤에서 읽으나 같은 문자열이다.

Yuuka에게 문자열 ss가 있으며, 그녀는 이에 대해 여러 질문을 하고 싶어 한다. 각 질문에서 Yuuka는 정수 리스트 x1,x2,…,xkx_1, x_2, \dots, x_k (여기서 xix_i는 1부터 시작하는 위치)와 정수 ll을 준다. s(x,p)s(x, p)를 ss에서 위치 xx부터 시작하는 길이 pp의 부분 문자열이라고 하자. tt는 s(x1,l),s(x2,l),…,s(xk,l)s(x_1, l), s(x_2, l), \dots, s(x_k, l)을 차례로 이어 붙인 문자열이다. Yuuka는 tt에 있는 회문 부분 문자열의 총 개수를 알고 싶어 한다.

입력

입력은 0개 이상의 테스트 케이스로 이루어지며, 파일의 끝(EOF)에서 끝난다. 각 테스트 케이스는 다음과 같다.

첫째 줄에 문자열의 길이 nn이 주어진다 (1≤n≤1051 \le n \le 10^5).

둘째 줄에 문자열 ss를 나타내는 정수 s1,s2,…,sns_1, s_2, \dots, s_n이 주어진다 (1≤si≤n1 \le s_i \le n). Yuuka가 사용하는 알파벳은 클 수 있으므로, 각 문자는 1부터 nn까지의 정수로 나타낸다.

셋째 줄에 질문의 개수 mm이 주어진다 (1≤m≤1051 \le m \le 10^5).

이어지는 mm개의 줄 각각에는 정수 kik_i와 lil_i, 그리고 kik_i개의 정수 xi,1,xi,2,…,xi,kix_{i,1}, x_{i,2}, \dots, x_{i,k_i}가 주어진다 (1≤ki≤1051 \le k_i \le 10^5, 1≤li≤n1 \le l_i \le n, ki⋅li≤109k_i \cdot l_i \le 10^9, 1≤xi,j≤n−li+11 \le x_{i,j} \le n - l_i + 1).

모든 nn의 합과 모든 kik_i의 합은 각각 10510^5를 넘지 않는다.

출력

각 질문마다 tt에 있는 회문 부분 문자열의 개수를 정수로 출력한다.

예제1

  1. 예제 1

    입력
    9
    1 2 1 2 1 2 1 2 1
    3
    3 3 1 4 7
    9 1 1 2 3 4 5 6 7 8 9
    4 3 1 2 1 2
    
    예상 출력
    25
    25
    42