아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Anagramistica

시간 제한1초메모리 제한512 MB

요약
서로 다른 n개의 단어가 주어질 때, 아나그램 쌍이 정확히 k개인 부분집합의 개수를 10^9+7로 나눈 나머지를 구한다.
난이도

보통10점 중 7점

유형
조합론, 동적 계획법, 해시맵, 수학
정답자
아직 제출이 없습니다

문제

Biljana는 십자말풀이를 만드는 것을 좋아한다. 그녀가 가장 좋아하는 유형은 이른바 애너그램 십자말풀이로, 각 힌트가 정답의 애너그램으로 주어진다.

그녀는 다음 퍼즐에 좋은 후보가 될 것 같은 단어 n개를 가지고 있다. 두 단어가 비슷하다는 것은 한 단어의 글자를 재배열해 다른 단어를 얻을 수 있다는 뜻이다. 즉 두 단어는 애너그램이다. 그녀는 자신의 단어 중 일부를 골라 그 부분집합 안에 비슷한 단어 쌍이 정확히 k개가 되도록 하려고 한다. 이런 부분집합의 개수를 구하는 것을 도와주자.

입력

첫째 줄에 정수 n (1 ≤ n ≤ 2000)과 k (0 ≤ k ≤ 2000)가 주어진다. n은 단어의 수, k는 필요한 비슷한 쌍의 수이다.

다음 n개 줄에 각각 알파벳 소문자로 이루어진 길이 10 이하의 단어가 하나씩 주어진다. 모든 단어는 서로 다르다.

출력

조건을 만족하는 부분집합의 개수를 109 + 7로 나눈 나머지를 출력한다.

예제3

  1. 예제 1

    입력
    3 1
    ovo
    ono
    voo
    
    예상 출력
    2
    
  2. 예제 2

    입력
    5 2
    trava
    vatra
    vrata
    leo
    ole
    
    예상 출력
    3
    
  3. 예제 3

    입력
    6 3
    mali
    lima
    imal
    je
    sve
    ej
    
    예상 출력
    6