만드는 중입니다

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

동전 교환

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

요약
동전 집합의 생성함수 계수가 주어질 때, 값 V인 동전 N개를 제거한 뒤 x^D의 계수를 1e9+7로 나눈 값을 각 질의마다 구한다.
난이도

보통10점 중 6점

유형
동적 계획법, 조합론, 수학
정답자
아직 제출이 없습니다

문제

강호는 동전 수집가다. 강호가 가진 동전의 가치는 모두 1 이상 DD 이하의 자연수다. 같은 가치의 동전을 여러 개 가지고 있을 수도 있다. 강호는 임의의 두 동전을 구분할 수 있으며, 두 동전의 가치가 같아도 구분할 수 있다.

준규는 강호가 어떤 동전을 가지고 있는지 알지 못한다. 준규가 아는 것은 강호의 동전으로 xx원을 만드는 방법의 수뿐이다.

f(x)f(x)는 강호가 가진 동전으로 xx원을 만드는 방법의 수이고, 이 값을 1,000,000,007로 나눈 나머지를 WxW_x라고 한다. 준규는 0≤i≤D0 \le i \le D인 모든 정수 ii에 대한 WiW_i를 알고 있다.

동전을 서로 구분하므로, 강호가 1원짜리 동전 두 개만 가지고 있다면 f(0)=1f(0) = 1, f(1)=2f(1) = 2, f(2)=1f(2) = 1이고 2보다 큰 모든 xx에 대해 f(x)=0f(x) = 0이다.

강호는 민호에게 동전 일부를 주려고 하며, 어떻게 줄지 고민하고 있다. 강호가 생각한 시나리오는 QQ개이고 서로 독립적이며, 1번부터 QQ번까지 번호가 붙어 있다. ii번째 시나리오는 두 정수 ViV_i와 NiN_i로 이루어지는데, 가치가 ViV_i인 동전 NiN_i개를 민호에게 준다는 뜻이다.

각각의 시나리오에 대해 동전을 민호에게 준 이후의 f(D)f(D)를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 DD가 주어진다. (1≤D≤19991 \le D \le 1999)

둘째 줄에 W0,W1,…,WDW_0, W_1, \dots, W_D가 주어진다. (0≤Wi≤10000000060 \le W_i \le 1000000006)

셋째 줄에 시나리오의 개수 QQ가 주어진다. (1≤Q≤20001 \le Q \le 2000)

넷째 줄부터 QQ개의 줄에 각 시나리오의 ViV_i와 NiN_i가 주어진다. (1≤Vi≤D1 \le V_i \le D, 1≤Ni≤10000001 \le N_i \le 1000000)

주어진 WiW_i와 맞아떨어지는 강호의 동전 구성은 여러 가지일 수 있다. 그런 모든 구성에서 시나리오를 그대로 실행할 수 있고 답이 모두 같은 경우만 입력으로 주어진다.

출력

각각의 시나리오에 대해 f(D)f(D)를 1,000,000,007로 나눈 나머지를 한 줄에 하나씩 출력한다.

예제4

  1. 예제 1

    입력
    2
    1 4 6
    3
    1 1
    1 2
    1 3
    
    예상 출력
    3
    1
    0
    
  2. 예제 2

    입력
    8
    1 2 1 0 0 0 0 0 7
    4
    8 1
    8 7
    1 1
    1 2
    
    예상 출력
    6
    0
    7
    7
    
  3. 예제 3

    입력
    5
    1 2 3 6 9 14
    10
    1 1
    2 1
    3 1
    4 1
    5 1
    1 2
    2 2
    3 2
    4 2
    5 2
    
    예상 출력
    9
    10
    11
    12
    13
    6
    8
    8
    10
    12
    
  4. 예제 4

    입력
    1
    1 0
    2
    1 1
    1 1000000
    
    예상 출력
    1000000006
    999000007