팰린드롬 세기

소문자로 이루어진 문자열에서 각 구간 질의 안에 완전히 포함된 팰린드롬 부분 문자열 개수를 구합니다.

어려움8문자열 매칭세그먼트 트리정렬수학아직 제출이 없습니다시간 제한2초메모리 제한64 MB

문제

모의고사를 열고 싶었지만 낼 문제가 없던 운영진은 머릿속에 떠오른 두 낱말, 팰린드롬과 자료구조를 섞어 문제를 내기로 했다.

승현이가 알파벳 소문자로만 이루어진 문자열 SS를 만들었다. 1ijS1 \le i \le j \le |S|인 두 정수 ii, jj에 대해 S[i..j]S[i..j]SSii번째 문자부터 jj번째 문자까지를 차례로 이어 붙인 부분문자열이다.

질의 하나는 두 정수 aa, bb로 주어진다. 각 질의마다 S[a..b]S[a..b] 안에 놓인 팰린드롬이 몇 개인지 세면 된다. 다시 말해 axyba \le x \le y \le b이면서 S[x..y]S[x..y]가 팰린드롬인 순서쌍 (x,y)(x, y)의 개수를 구한다. 같은 문자열이라도 시작 위치가 다르면 따로 센다.

입력

첫째 줄에 승현이가 만든 문자열 SS가 주어진다. SS는 알파벳 소문자 a부터 z까지로만 이루어져 있고, 길이는 1S1000001 \le |S| \le 100\,000이다.

둘째 줄에 질의의 개수 QQ (1Q3000001 \le Q \le 300\,000)가 주어진다. 이어지는 QQ개의 줄에 각각 두 정수 aia_ibib_i (1aibiS1 \le a_i \le b_i \le |S|)가 주어진다.

출력

질의마다 S[ai..bi]S[a_i..b_i] 안에 놓인 팰린드롬의 개수를 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.

힌트

문자열 T=t1t2t3tnT = t_1 t_2 t_3 \cdots t_n이 팰린드롬이라는 것은 앞에서 뒤로 읽으나 뒤에서 앞으로 읽으나 같다는 뜻이다. 즉 t1t2t3tn1tn=tntn1t3t2t1t_1 t_2 t_3 \cdots t_{n-1} t_n = t_n t_{n-1} \cdots t_3 t_2 t_1을 만족하는 TT가 팰린드롬이다. 길이가 1인 문자열은 언제나 팰린드롬이다.

S|S|는 문자열 SS의 길이이다.