이름 짓기

면접 대비

시간 제한1.5초메모리 제한1024 MB

요약
소문자로 이루어지고 길이가 2 이상 N 이하이며 모든 인접한 두 글자 조합이 주어진 허용 목록에 속하는 문자열의 개수를 10^9+7로 나눈 나머지를 구한다.
난이도

보통10점 중 6점

유형
동적 계획법, 행렬, 그래프, 조합론
정답자
아직 제출이 없습니다

문제

오늘도 평화로운 대곽 나라에서는 다음과 같은 규칙으로 이름을 짓는다.

  • 이름은 알파벳 소문자로만 이루어진다.
  • 이름의 글자 수는 22자 이상 NN자 이하여야 한다.
  • 이름의 모든 연속된 22자는 허용된 조합이어야 한다.

예를 들어, 'ac', 'bd', 'cd'가 허용된 조합이라고 하자. 'acd'는 'ac' 와 'cd'가 모두 허용된 조합 이므로 사용 가능한 이름이다. 하지만 'abd'는 'ab'가 허용된 조합이 아니기 때문에 사용할 수 없다.

허용된 조합이 주어질 때, 규칙을 준수하면서 만들 수 있는 이름의 총 개수를 구해 보자.

입력

첫째 줄에 허용된 조합의 수 KK, 이름의 최대 글자 수 NN이 공백으로 구분되어 주어진다. (1≤K≤676(1 \leq K \leq 676; 2≤N≤100,000)2 \leq N \leq 100\\,000) 

다음 KK개 줄에 걸쳐 각각 허용된 조합을 나타내는 문자열 ss가 주어진다. ss는 알파벳 소문자 22자로 이루어져 있으며, KK개의 문자열은 서로 다르다.

출력

만들 수 있는 이름의 총 개수를 109+710^9 + 7로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

    입력
    3 4
    ac
    cd
    bd
    
    예상 출력
    4