게으른 철자 대회 (큰 입력)
면접 대비시간 제한5초메모리 제한512 MB
목표 단어의 각 위치에서 이웃 글자로 만들 수 있는 서로 다른 단어 개수를 1,000,000,007로 나눈 나머지를 구합니다.
문제
철자 대회에 나온 참가자는 목표 단어 의 철자를 말한다. 참가자가 말한 단어 는 길이가 와 같고, 모든 에 대해 의 번째 글자가 의 번째, 번째, 번째 글자 가운데 하나와 같으면 정답으로 인정한다. 에 번째 글자는 없으므로 의 첫 글자는 의 첫 글자나 두 번째 글자와 같아야 한다. 마찬가지로 의 마지막 글자는 의 마지막 글자나 그 바로 앞 글자와 같아야 한다. 목표 단어 자신은 언제나 정답으로 인정한다.
대회를 준비하면서 목표 단어마다 서로 다른 정답 단어가 몇 개인지 세어야 한다. 이 수가 매우 커질 수 있으므로 로 나눈 나머지를 출력한다.
입력
첫 줄에 테스트 케이스의 수 가 주어진다. 이어지는 개의 줄에 소문자 알파벳(a부터 z)으로만 이루어진 문자열이 한 줄에 하나씩 주어진다.
제한
- 각 문자열의 길이는 이상 이하이다.
출력
각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. 는 부터 시작하는 테스트 케이스 번호이고, 는 서로 다른 정답 단어의 개수를 로 나눈 나머지이다.
설명
목표 단어가 ag이면 정답으로 인정하는 단어는 aa, ag, ga, gg로 네 개다. 목표 단어가 aa이면 정답은 aa 하나뿐이다.