만드는 중입니다

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

오렌지 리프의 특별 훈련

시간 제한8초메모리 제한1024 MB

요약
배열과 Q개의 구간 [l, r]이 주어질 때, 배열의 모든 부분 구간 [i, j]와 [l, r]의 최장 공통 접두사 길이의 합을 10^9+7로 나눈 나머지로 구합니다.
난이도

어려움10점 중 8점

유형
문자열 매칭, 세그먼트 트리, 정렬
정답자
아직 제출이 없습니다

문제

이 문제는 인터랙티브 문제가 아닙니다.

리프는 코드포스 레드에 가기 위해 구사과에게 특별 훈련을 받고 있다. 구사과는 리프에게 수열 AA를 주고, 구사과가 생각한 수열 위의 구간 I=[a,b]I=[a, b] 안에 있는 수들의 값을 맞춰 보라고 했다.

리프는 구사과에게 다음과 같은 질문을 할 수 있다.

  • [i,j][i, j] 구간과 [a,b][a, b] 구간의 최장 공통 접두사의 길이는 얼마인가? (예를 들어 A=[1,2,1,2,3]A=[1, 2, 1, 2, 3]인 경우 [1,4][1, 4] 구간과 [3,5][3, 5] 구간의 최장 공통 접두사의 길이는 2이다.)

원래는 리프가 구사과에게 적은 횟수의 질문을 해서 [a,b][a, b] 안의 수들의 값을 맞춰야 했다. 하지만 구사과가 깜박하고 질문 횟수 제한을 거는 것을 잊어버렸다. 리프는 모든 구간에 대해 위와 같은 질문을 하고, 구사과가 낸 문제를 쉽게 풀어 냈다.

이렇게 된 이상, 구사과는 리프에게 아래와 같은 문제를 QQ개 내고 빠르게 풀라고 했다. 리프를 도와 구사과가 낸 문제를 빠르게 푸는 프로그램을 작성해 보자.

  • 구사과가 생각한 구간이 [li,ri][l_i, r_i]일 때, 리프가 모든 구간에 대해 위와 같은 질문을 한다면 구사과 대답의 총합은 얼마인가?

입력

첫 줄에는 구사과가 만든 수열의 길이 NN과 구사과의 질문 횟수 QQ가 주어진다.

둘째 줄에는 수열 AA의 각 원소 A1,A2,⋯ ,ANA_1, A_2, \cdots, A_N이 주어진다.

셋째 줄부터 Q+2Q+2번째 줄까지 QQ개의 줄에 구사과의 질문을 나타내는 두 정수 lil_i, rir_i가 주어진다.

출력

QQ개의 질문에 대한 답을 MODMOD로 나눈 나머지를 한 줄에 하나씩 출력한다.

제한

  • 1≤N≤3×1051 \le N \le 3 \times 10^5
  • 1≤Q≤1061 \le Q \le 10^6
  • 1≤l≤r≤N1 \le l \le r \le N
  • 1≤Ai≤1091 \le A_i \le 10^9
  • MOD=109+7MOD = 10^9+7

예제3

  1. 예제 1

    입력
    5 5
    1 2 3 1 2
    1 5
    1 2
    2 4
    3 3
    4 5
    
    예상 출력
    18
    12
    10
    3
    12
    
  2. 예제 2

    입력
    1 1
    20
    1 1
    
    예상 출력
    1
    
  3. 예제 3

    입력
    10 5
    2 2 2 2 2 2 2 2 2 2
    1 10
    1 1
    3 8
    10 10
    2 5
    
    예상 출력
    220
    55
    200
    55
    164