어휘 단어마다 글자를 섞은 뒤 이어 붙여 주어진 암호 문자열을 만드는 문장의 수를 각 문자열마다 센다.
보통7동적 계획법문자열조합론아직 제출이 없습니다시간 제한5초메모리 제한512 MB코드자몬 괴물은 암호문으로 대화한다. 방식은 다음과 같다.
괴물의 종류마다 고유한 어휘 목록이 있다. 소문자 알파벳으로만 이루어진 서로 다른 단어 V개다. 괴물은 말할 때 먼저 자기 어휘에 있는 단어를 늘어놓아 문장을 만든다. 같은 단어가 한 문장에 여러 번 나와도 된다. 그다음 그 문장을 아래 두 단계로 암호문으로 바꾼다.
괴물의 말을 알아들으면 큰 이득이 되므로 이를 해주는 도구를 만들려고 한다. 첫 단계로 암호문 하나를 받아 그 암호문이 나올 수 있는 원래 문장이 몇 개인지 세려고 한다. 예를 들어 어휘가 "this", "is", "a", "monster", "retsnom"이고 암호문이 "ishtsiarestmon"이면 원래 문장은 다음 네 가지다.
같은 괴물에게서 얻은 암호문 S개가 주어진다. 각 암호문마다 가능한 원래 문장의 개수를 구하라.
답이 매우 커질 수 있으므로 소수 109+7로 나눈 나머지를 출력한다.
첫 줄에 테스트 케이스 개수 T가 주어진다.
각 테스트 케이스의 첫 줄에는 어휘의 크기 V와 암호문의 개수 S가 공백으로 구분되어 주어진다. 이어지는 V줄에는 어휘에 있는 단어가 한 줄에 하나씩 주어진다. 단어는 소문자 알파벳으로만 이루어져 있고 서로 다르다. 그다음 S줄에는 암호문이 한 줄에 하나씩 주어진다. 암호문도 소문자 알파벳으로만 이루어져 있다.
모든 암호문은 유효하다. 즉 암호문마다 그 암호문을 만들어 낼 수 있는 원래 문장이 적어도 하나 있다.
각 테스트 케이스마다 Case #x: y 형식으로 한 줄을 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, y는 정수 S개를 공백으로 구분한 목록이다. 입력에 주어진 순서대로 각 암호문의 답을 109+7로 나눈 나머지를 쓴다.