만드는 중입니다

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

LISA

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

요약
문자열 n개와 구간 질의가 주어질 때, 구간 안 문자열의 접두사와 접미사를 이어 만들 수 있는 서로 다른 문자열의 개수를 구합니다.
난이도

어려움10점 중 9점

유형
트라이, 문자열, 분할 정복, 동적 계획법
정답자
아직 제출이 없습니다

문제

일리야는 문자열 알고리즘 연구소(LISA)에서 일한다. 지금 그는 다음 문제를 풀고 있다.

문자열 배열 s1,s2,…,sns_1, s_2, \ldots, s_n과 qq개의 질의가 주어진다. 각 질의는 두 정수 lil_i, rir_i (1≤li≤ri≤n1 \le l_i \le r_i \le n)로 주어진다. 질의에 답하려면 다음 방법으로 만들 수 있는 문자열을 세야 한다. li≤x,y≤ril_i \le x, y \le r_i를 만족하는 두 문자열 sxs_x, sys_y를 고른다. sxs_x의 비어 있지 않은 접두사와 sys_y의 비어 있지 않은 접미사를 가져와 이어 붙인다. 이렇게 만든 문자열을 표현 가능한 문자열이라고 한다. 질의의 답은 lil_i, rir_i에 대해 서로 다른 표현 가능한 문자열의 개수다.

예를 들어 s=[abc,ab,ac,bcac]s = [abc, ab, ac, bcac]이고 li=2l_i = 2, ri=3r_i = 3이라고 하자. 다음 문자열은 표현 가능하다.

x=2x = 2, y=2y = 2인 경우: ab = a + b, aab = a + ab, abb = ab + b, abab = ab + ab. x=2x = 2, y=3y = 3인 경우: ac = a + c, aac = a + ac, abc = ab + c, abac = ab + ac. x=3x = 3, y=2y = 2인 경우: ab = a + b, aab = a + ab, acb = ac + b, acab = ac + ab. x=3x = 3, y=3y = 3인 경우: ac = a + c, aac = a + ac, acc = ac + c, acac = ac + ac.

따라서 서로 다른 표현 가능한 문자열은 12개다.

입력

첫 줄에 두 정수 nn, qq가 주어진다. 각각 문자열의 개수와 질의의 개수다 (1≤n,q≤1051 \le n, q \le 10^5). 다음 nn개의 줄에는 비어 있지 않은 단어 sis_i가 하나씩 주어진다. 단어는 영소문자로만 이루어진다. 모든 단어 길이의 합은 10510^5을 넘지 않는다. 다음 qq개의 줄에는 두 정수 lil_i, rir_i (1≤li≤ri≤n1 \le l_i \le r_i \le n)가 주어진다.

출력

qq개의 줄을 출력한다. ii번째 줄에는 ii번째 질의의 답을 출력한다.

예제1

  1. 예제 1

    입력
    4 3
    abc
    ab
    ac
    bcac
    3 4
    1 3
    2 3
    
    예상 출력
    20
    23
    12