알파벳 다항식 (Small)
시간 제한5초메모리 제한512 MB
차수가 4 이하인 다항식과 단어 사전이 주어질 때, 사전 단어를 최대 K개 이어 붙인 모든 구절에서 다항식 값을 합해 10009로 나눈 나머지를 구한다.
문제
차수가 4인 다항식과 5인 다항식은 성질이 크게 다르다. 일반적인 5차 다항식의 근을 구하는 닫힌 공식이 없다는 사실에서 갈루아 이론이 나왔지만, 이 문제와는 아무 상관이 없다.
여기서는 소문자 알파벳 26개를 변수로 쓰는 차수 4 이하의 다변수 다항식만 다룬다. 다음은 그런 다항식의 예다.
aber+aab+c
문자열 가 주어지면 각 변수에 그 문자가 에 나타나는 횟수를 대입해서 다항식의 값 를 구한다.
예를 들어 위 다항식에 = abracadabra edgar를 대입한다. a는 여섯 번, b는 두 번, c는 한 번, e는 한 번, r은 세 번 나오므로 값은 다음과 같다.
p(S) = 6 * 2 * 1 * 3 + 6 * 6 * 2 + 1 = 109
서로 다른 소문자 단어로 이루어진 사전이 주어진다. 문자열 가
S = S1 S2 S3 ... Sd
꼴이고 각 가 사전에 있는 단어이면 를 -구절이라고 부른다. 즉 사전의 단어 개를 공백 하나로 이어 붙인 문자열이다. 같은 단어를 여러 번 써도 되고, 단어를 놓는 순서가 다르면 서로 다른 구절로 센다.
정수 가 주어진다. 인 각 에 대해 모든 -구절의 합을 구하라. 답이 커질 수 있으므로 10009로 나눈 나머지를 출력한다.
입력
첫 줄에 테스트 케이스의 개수 가 주어진다. 각 테스트 케이스의 형식은 다음과 같다.
- 첫 줄에 다항식 , 공백, 정수 가 차례로 주어진다.
- 다음 줄에 사전에 있는 단어의 개수 이 주어진다.
- 다음 개 줄에 소문자로만 이루어진 단어가 한 줄에 하나씩 주어진다. 한 테스트 케이스 안에서 같은 단어가 두 번 나오지 않는다.
다항식은 항의 합으로 적고, 각 항은 변수의 곱이다. 는 a를 개 이어 붙여 적는다. 예를 들어 는 aab로 적는다. 한 항 안의 변수는 항상 사전순으로 감소하지 않게 적혀 있다.
제한
- 는
+로 이어진 항 하나 이상으로 이루어지고,+로 시작하거나 끝나지 않는다. 한 다항식의 항은 최대 5개다. 각 항은 사전순으로 감소하지 않는 소문자 1개 이상 4개 이하로 이루어진다. 한 다항식 안에 같은 항이 두 번 나오지 않는다. - 각 단어는 비어 있지 않고, 소문자로만 이루어지며, 길이가 50 이하다.
출력
각 테스트 케이스마다 다음 형식으로 한 줄을 출력한다.
Case #X: sum1 sum2 ... sumK
는 1부터 시작하는 테스트 케이스 번호이고, 번째 수는 모든 -구절에 대한 의 합을 10009로 나눈 나머지다.