아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

암호 해독

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

요약
암호화된 숫자열을 0부터 9까지의 삼항식 값으로 나누는 경우의 수를 구하고, 각 위치 갱신 뒤의 값을 출력한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 세그먼트 트리, 행렬, 구현
정답자
아직 제출이 없습니다

문제

또 그들이 보안 시스템을 바꿨다. 그럼 은행 시스템을 처음부터 다시 해킹해야 한다! 우리는 암호화된 형태의 비밀번호를 가로챘다. 또한 은행에 잠입한 우리 사람이 새 시스템에서 비밀번호가 어떻게 암호화되는지 알려줬다.

시스템의 비밀번호는 어떤 숫자열이다. 이는 다음과 같이 암호화된다. 각 숫자 대신 그 숫자에 대한 우리가 알고 있는 어떤 이차 삼항식의 값을 쓴다. 즉 숫자 xx 대신 ax2+bx+cax^2 + bx + c를 쓰고, 서로 다른 숫자에 대한 값들은 공백 없이 연속해서 쓴다. 예를 들어 암호화 삼항식이 x2−6x+9x^2 - 6x + 9이고 암호화할 비밀번호가 132라면 암호화 후에는 401이 되고, 비밀번호 198은 43625로 암호화된다.

그러나 암호화된 비밀번호가 항상 유일하게 해독되는 것은 아니다. 예를 들어 같은 삼항식 x2−6x+9x^2 - 6x + 9와 암호화된 비밀번호 401을 보자. 이는 네 가지 서로 다른 비밀번호 132, 134, 532, 534의 암호화로 나올 수 있다.

게다가 채널 문제로 인해 암호화된 비밀번호를 일부 오류와 함께 가로챘을 수도 있다. 비밀번호에 순차적으로 적용해야 하는 수정 목록이 있다. 각 수정은 암호화된 비밀번호의 어떤 위치에 있는 숫자를 주어진 숫자로 바꾸라는 것을 알려준다.

당신은 팀에서 가장 뛰어난 해커이므로, 비밀번호를 해독할 수 있는 방법의 수를 세는 것이 당신의 임무이다. 방법의 수는 원래 비밀번호에 대해서, 그리고 각 수정 연산 후마다 출력해야 한다. 답이 상당히 클 수 있으므로 109+710^9+7로 나눈 나머지를 구해야 한다.

입력

첫째 줄에는 세 정수 aa, bb, cc (0≤a≤100 \le a \le 10, −10≤b,c≤10-10 \le b, c \le 10)가 주어진다. 이는 삼항식의 계수이다. 둘째 줄에는 하나의 문자열 ss가 주어지며, 이는 암호화된 비밀번호로 길이는 50 00050\,000을 넘지 않는다. 셋째 줄에는 하나의 정수 mm (0≤m≤50 0000 \le m \le 50\,000)이 주어지며, 이는 수정의 개수이다. 다음 mm개의 줄에는 각각 두 수 pip_i와 did_i (1≤pi≤1 \le p_i \le 문자열 ss의 길이, 0≤di≤90 \le d_i \le 9)가 주어지며, 이는 숫자를 바꿀 위치와 새로운 숫자 값이다.

삼항식은 xx에 0부터 9까지의 값을 대입했을 때 음수를 반환하지 않음이 보장된다.

출력

m+1m + 1개의 수를 출력한다. 첫 번째 수는 원래 비밀번호를 해독할 수 있는 경우의 수여야 하며, 그다음 각 수정 후의 비밀번호를 해독할 수 있는 경우의 수를 출력한다. 답의 모든 수는 109+710^9+7로 나눈 나머지로 구해야 한다.

예제1

  1. 예제 1

    입력
    1 -6 9
    401
    9
    3 9
    2 9
    1 9
    2 0
    1 0
    3 0
    2 1
    3 4
    1 1
    
    예상 출력
    4
    4
    8
    8
    4
    2
    1
    2
    4
    8