베라와 정렬

재귀적 퀵정렬과 비슷한 함수가 비교를 정확히 K번 수행하는 크기 N 순열의 개수를 10^9+7로 나눈 나머지로 구한다.

보통7동적 계획법조합론재귀수학아직 제출이 없습니다시간 제한2초메모리 제한256 MB

문제

베라는 새로운 정렬 알고리즘을 만들었다. 그 알고리즘이 몇 단계를 거치는지 세려고 베라가 작성한 파이썬 함수는 다음과 같다.

def steps(array):
    if len(array) == 0:
        return 0
    pivot = array[0]
    count = 0
    lesser = []
    greater = []
    for element in array:
        count += 1
        if element < pivot:
            lesser.append(element)
        elif element > pivot:
            greater.append(element)
    return count + steps(lesser) + steps(greater)

크기가 NN인 순열 PP는 정수열 P1,P2,,PNP_1, P_2, \dots, P_N이며, 원소는 모두 다르고 각각 NN 이하의 양의 정수다.

정수 NNKK가 주어진다. steps(P)steps(P)KK를 반환하는 크기 NN의 순열 PP가 몇 개인지 세어라. 답이 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 출력한다.

입력

첫째 줄에 정수 NNKK가 공백으로 구분되어 주어진다.

  • 1N301 \le N \le 30
  • 1K9001 \le K \le 900

출력

조건을 만족하는 순열의 개수를 109+710^9 + 7로 나눈 나머지를 한 줄에 출력한다.

힌트

N=3N = 3, K=5K = 5일 때 조건을 만족하는 순열은 (2,1,3)(2, 1, 3)(2,3,1)(2, 3, 1) 두 개다.