만드는 중입니다

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

문자열 만들기

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

요약
각 문자의 가중치가 1부터 9까지인 문자 집합이 주어질 때, 가중치 합이 a 이상 b 이하인 문자열의 개수를 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

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

문제

알파벳 대문자 A-Z, 알파벳 소문자 a-z, 숫자 0-9를 원소로 가지는 집합 CC의 부분 집합 PP를 정의역으로 하는 함수 f(c)f(c)가 있다. f(c)f(c)의 값은 1 이상 9 이하의 자연수이다.

1 이상 9 이하의 자연수 ii에 대해 집합 SiS_i를 다음과 같이 정의하자. SiS_i는 집합 PP의 원소 중에서 함수 ff의 함숫값이 ii가 되는 문자들의 집합이다.

Si={c∈P∣f(c)=i}S_i=\{c \in P \mid f(c)=i\}

SiS_i에 속하는 문자가 각각 주어질 때, 다음 함수 g(x)g(x)의 값이 aa 이상 bb 이하가 되도록 하는 서로 다른 xx의 개수를 구하여 보자.

g(x)=∑i=1∣x∣f(xi)g(x)=\sum_{i=1}^{|x|}{f(x_i)}

단, xx는 PP에 속한 문자들을 이어 붙여 만든 길이가 1 이상인 문자열이고, xix_i는 xx의 ii번째 문자이다. 또, ∣x∣|x|는 문자열 xx의 길이를 의미한다.

입력

첫째 줄에 정수 aa와 bb가 공백을 기준으로 주어진다. (1≤a≤b≤1018,b−a<5,000,000)(1 \leq a \leq b \leq 10^{18}, b - a < 5,000,000)

둘째 줄부터 열 번째 줄까지 SiS_i의 모든 문자가 (i+1)(i + 1)번째 줄에 공백 없이 주어진다.

집합 SiS_i의 원소의 개수는 1 이상 50 이하이다.

주어지는 모든 문자는 알파벳 대소문자, 숫자로 구성되어 있고 각 문자는 최대 한 번씩만 등장한다.

출력

서로 다른 xx의 개수를 1,000,000,0071,000,000,007로 나눈 나머지를 출력한다. 이 수는 소수이다.

예제1

  1. 예제 1

    입력
    3 7
    abcd
    ef
    ABC
    DEF
    012
    GHI
    JK
    LMNO
    XYZ
    
    예상 출력
    47993