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

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

K번째 문자열

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

요약
서로 다른 n개 문자의 순열 t 중, 비어 있지 않은 부분 문자열을 사전순으로 정렬했을 때 k번째가 s인 순열의 개수를 1e9+7로 나눈 나머지로 구한다.
난이도

어려움10점 중 9점

유형
문자열, 조합론, 수학, 구현
정답자
아직 제출이 없습니다

문제

Alice는 n≤26n \le 26장의 카드를 가지고 있고, 각 카드에는 알파벳 소문자 처음 nn글자 중 하나가 적혀 있다. 예를 들어 n=3n = 3이면 Alice는 "a", "b", "c"가 적힌 카드 세 장을 가지고 있다. Alice는 이 카드들을 한 번씩 사용해 문자열 tt를 만들었다. 그리고 tt의 모든 비어 있지 않은 부분 문자열을 사전순으로 정렬했더니, 정렬된 목록에서 kk번째 문자열이 ss였다. 가능한 tt는 몇 개인가?

예를 들어 n=3n = 3이고 t=‘cab‘t = `cab`이면 정렬된 목록은 a, ab, b, c, ca, cab이고, 세 번째 문자열은 b이다. k=3k = 3이고 s=‘b‘s = `b`일 때 tt로 가능한 것은 cab과 bac 두 가지이다.

주어진 정보와 일치하는 tt의 개수를 109+710^9 + 7로 나눈 나머지를 구한다. Alice가 실수했을 수도 있으며, 그 경우 가능한 tt의 개수는 0이다.

입력

첫째 줄에 공백으로 구분된 두 정수 nn과 kk가 주어진다. 다음 줄에 문자열 ss가 주어진다 (1≤n≤261 \le n \le 26, 1≤k≤n(n+1)/21 \le k \le n (n + 1) / 2). ss의 문자는 서로 다르며, ss는 알파벳 소문자 처음 nn글자로 이루어져 있다.

출력

답을 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    2 2
    b
    
    예상 출력
    1
    
  2. 예제 2

    입력
    3 3
    b
    
    예상 출력
    2