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

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

알파베토미얼 (큰 입력)

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

요약
26개 문자 개수에 대한 다항식과 단어 사전이 주어질 때, 사전 단어 1개부터 K개로 만든 모든 구(phrase)에서 다항식 값을 10009로 나눈 나머지의 합을 구한다.
난이도

보통10점 중 7점

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

문제

변수 26개를 쓰는 4차 이하 다변수 다항식만 다룬다. 변수는 영어 소문자 26개가 하나씩 맡는다. 다음은 그런 다항식의 예다.

aber+aab+c

문자열 SS가 주어지면 이 다항식에 값을 대입해 계산한다. 각 변수 자리에는 그 문자가 SS에 나타난 횟수를 넣고, 그 결과를 p(S)p(S)라고 쓴다.

예를 들어 위 다항식에 SS = abracadabra edgar를 넣어 보자. a는 여섯 번, b는 두 번, c는 한 번, e는 한 번, r은 세 번 나오므로

p(S)=6×2×1×3+6×6×2+1=109p(S) = 6 \times 2 \times 1 \times 3 + 6 \times 6 \times 2 + 1 = 109

이다.

서로 다른 소문자 단어로 이루어진 사전이 주어진다. 문자열 SS가

S = "S1 S2 S3 ... Sd"

꼴이고 각 SiS_i가 사전에 있는 단어이면 SS를 dd-구절이라고 부른다. 즉 사전의 단어 dd개를 공백 하나로 이어 붙인 문자열이며, 같은 단어를 여러 번 써도 된다. K≤10K \le 10인 KK가 주어질 때, 1≤d≤K1 \le d \le K인 모든 dd에 대해 모든 dd-구절에 걸친 p(S)p(S)의 합을 구하라. 합이 커지므로 각 합을 10009로 나눈 나머지를 출력한다.

입력

첫째 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스의 형식은 다음과 같다.

  • 첫 줄에 다항식을 나타내는 식 pp, 공백 하나, 정수 KK가 차례로 주어진다.
  • 다음 줄에 사전에 든 단어의 개수 nn이 주어진다.
  • 이어지는 nn개의 줄에 소문자로만 이루어진 단어가 한 줄에 하나씩 주어진다. 한 테스트 케이스 안에서 같은 단어가 두 번 나오지 않는다.

다항식은 항의 합으로 쓰고, 각 항은 변수의 곱이다. ata^t는 문자 a를 tt개 이어 붙여 쓴다. 예를 들어 a2ba^2b는 aab로 쓴다. 한 항 안의 변수는 항상 사전순 비내림차순이다.

제한

  • 1≤T≤1001 \le T \le 100
  • pp는 항 하나 이상을 +로 이은 문자열이며, +로 시작하거나 끝나지 않는다. 한 pp의 항은 최대 5개다. 각 항은 소문자 1개 이상 4개 이하로 이루어지고 비내림차순으로 정렬되어 있다. 한 다항식 안에 같은 항이 두 번 나오지 않는다.
  • 각 단어는 비어 있지 않고 영어 소문자로만 이루어지며 길이가 50 이하다. 한 사전 안에 같은 단어가 두 번 나오지 않는다.
  • 1≤n≤1001 \le n \le 100
  • 1≤K≤101 \le K \le 10

출력

각 테스트 케이스마다 다음 형식으로 한 줄을 출력한다.

Case #X: sum1 sum2 ... sumK

XX는 1부터 시작하는 테스트 케이스 번호이고, ii번째 값은 모든 ii-구절에 대한 p(S)p(S)의 합을 10009로 나눈 나머지다.

예제2

  1. 예제 1

    입력
    2
    ehw+hwww 5
    6
    where
    when
    what
    whether
    who
    whose
    a+e+i+o+u 3
    4
    apple
    orange
    watermelon
    banana
    
    예상 출력
    Case #1: 15 1032 7522 6864 253
    Case #2: 12 96 576
    
  2. 예제 2

    입력
    1
    a 2
    2
    ab
    ba
    
    예상 출력
    Case #1: 2 8