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

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

알파벳 다항식 (Small)

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

요약
차수가 4 이하인 다항식과 단어 사전이 주어질 때, 사전 단어를 최대 K개 이어 붙인 모든 구절에서 다항식 값을 합해 10009로 나눈 나머지를 구한다.
난이도

보통10점 중 6점

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

문제

차수가 4인 다항식과 5인 다항식은 성질이 크게 다르다. 일반적인 5차 다항식의 근을 구하는 닫힌 공식이 없다는 사실에서 갈루아 이론이 나왔지만, 이 문제와는 아무 상관이 없다.

여기서는 소문자 알파벳 26개를 변수로 쓰는 차수 4 이하의 다변수 다항식만 다룬다. 다음은 그런 다항식의 예다.

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 = 109

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

S = S1 S2 S3 ... Sd

꼴이고 각 SiS_i가 사전에 있는 단어이면 SS를 dd-구절이라고 부른다. 즉 사전의 단어 dd개를 공백 하나로 이어 붙인 문자열이다. 같은 단어를 여러 번 써도 되고, 단어를 놓는 순서가 다르면 서로 다른 구절로 센다.

정수 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^2 b는 aab로 적는다. 한 항 안의 변수는 항상 사전순으로 감소하지 않게 적혀 있다.

제한

  • 1≤T≤1001 \le T \le 100
  • pp는 +로 이어진 항 하나 이상으로 이루어지고, +로 시작하거나 끝나지 않는다. 한 다항식의 항은 최대 5개다. 각 항은 사전순으로 감소하지 않는 소문자 1개 이상 4개 이하로 이루어진다. 한 다항식 안에 같은 항이 두 번 나오지 않는다.
  • 각 단어는 비어 있지 않고, 소문자로만 이루어지며, 길이가 50 이하다.
  • 1≤n≤201 \le n \le 20
  • 1≤K≤51 \le K \le 5

출력

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

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
    aaaa 5
    1
    aaaa
    
    예상 출력
    Case #1: 256 4096 718 5482 9865