만드는 중입니다

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

종이 쌓기

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

요약
각 질의 구간의 숫자를 위쪽에 붙이거나 아래쪽에 붙이거나 버려서 만든 수 중 A 이상 B 이하인 경우의 수를 구합니다.
난이도

어려움10점 중 8점

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

문제

Farmer John이 종이 NN장(1≤N≤3001\le N\le 300)에 숫자를 적었다. 각 i∈[1,N]i\in [1,N]에 대해 ii번째 종이에는 숫자 aia_i(1≤ai≤91 \leq a_i \leq 9)가 적혀 있다.

소들에게는 좋아하는 정수 AA와 BB(1≤A≤B<10181\le A\le B< 10^{18})가 있고, 소들은 QQ개의 질의(1≤Q≤5⋅1041\le Q\le 5\cdot 10^4)에 답을 얻고자 한다. ii번째 질의에서 소들은 종이 lil_i번째부터 rir_i번째까지(1≤li≤ri≤N1\le l_i\le r_i\le N) 왼쪽에서 오른쪽으로 차례로 지나가며, 처음에는 빈 더미를 유지한다. 각 종이마다 더미의 맨 위에 올리거나, 맨 아래에 놓거나, 아무것도 하지 않는다. 과정이 끝나면 더미를 위에서 아래로 읽어 정수를 만든다. 가능한 3ri−li+13^{r_i-l_i+1}가지 선택 전부에 대해, 읽은 정수가 [A,B][A,B] 구간에 들어가는 경우의 수를 세고, 그 값을 109+710^9+7로 나눈 나머지를 출력한다.

입력

첫째 줄에 세 정수 NN, AA, BB가 공백으로 구분되어 주어진다.

둘째 줄에 NN개의 숫자 a1,a2,…,aNa_1, a_2, \dots, a_N이 공백으로 구분되어 주어진다.

셋째 줄에 질의의 개수 QQ가 주어진다.

이어지는 QQ개의 줄에는 각각 두 정수 lil_i와 rir_i가 공백으로 구분되어 주어진다.

출력

각 질의마다 답을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    5 13 327
    1 2 3 4 5
    3
    1 2
    1 3
    2 5
    
    예상 출력
    2
    18
    34