만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

흥미로운 단어

시간 제한3초메모리 제한2048 MB

요약
주어진 단어들을 순서대로 이어 붙여 길이가 정확히 L인 회문이 되는 경우의 수를 10^9+7로 나눈 나머지로 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 문자열 매칭, 해시맵
정답자
아직 제출이 없습니다

문제

Ene는 회문을 좋아한다.

Ene에게는 흥미로운 단어 목록이 있다. Ene는 흥미로운 단어를 몇 개 골라 이어 붙여서 길이가 정확히 LL인 회문을 만들려고 한다. 각 단어는 여러 번 골라도 되고, 전혀 고르지 않아도 된다.

Ene는 이렇게 만드는 방법의 수를 알고 싶다. 이어 붙인 단어의 순서가 다르면 서로 다른 방법으로 본다. 서로 다른 방법이 같은 회문을 만들 수도 있다. 답이 매우 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 구한다.

입력

첫 줄에 양의 정수 NN과 LL이 주어진다. NN은 흥미로운 단어의 개수이고, LL은 만들 회문의 길이이다 (1≤N≤3331 \le N \le 333, 1≤L≤10001 \le L \le 1000).

이어지는 NN개 줄에 흥미로운 단어 sis_i가 한 줄씩 주어진다 (1≤∣si∣≤L1 \le |s_i| \le L, ∑i=1N∣si∣≤600\sum_{i=1}^N |s_i| \le 600). 단어는 소문자 영어 알파벳으로만 이루어져 있으며, 서로 다르다.

출력

회문을 만드는 방법의 수를 109+710^9 + 7로 나눈 나머지로 한 줄에 출력한다.

힌트

첫 번째 예제에서 서로 다른 방법은 다음 다섯 가지이다: stack cats; evil olive; eel eve lee; lee eve eel; eve eve eve.

예제3

  1. 예제 1

    입력
    7 9
    cats
    eel
    eve
    evil
    lee
    olive
    stack
    
    예상 출력
    5
    
  2. 예제 2

    입력
    2 2
    a
    aa
    
    예상 출력
    2
    
  3. 예제 3

    입력
    6 12
    aa
    aab
    no
    on
    pets
    step
    
    예상 출력
    43