트리 가짓수 세기

아직 제출이 없습니다시간 제한2초메모리 제한256 MB

문제

이진 검색 트리(BST, Binary Search Tree)는 모든 노드가 최대 22개의 자식 노드를 가지고 있는 트리이다. 만약 어떤 노드에 쓰여 있는 수가 XX라면, 그 노드의 왼쪽 서브트리에는 XX보다 작은 수, 오른쪽 서브트리에는 XX보다 큰 수만 저장되어 있어야 한다.

다음은 BST의 삽입하는 함수를 수도-코드(pseudo code)로 작성한 것이다.

insert(number X, node N)
    if X가 노드 N에 있는 수보다 작다면
        if N의 왼쪽 자식이 없다면
            X를 포함하는 새 노드를 만든 뒤, N의 왼쪽 자식으로 만든다
        else
            insert(X, N의 왼쪽 자식)
    else (X가 노드 N에 있는 수보다 크다면)
        if N의 오른쪽 자식이 없다면
            X를 포함하는 새 노드를 만든 뒤, N의 오른쪽 자식으로 만든다
        else
            insert(X, N의 오른쪽 자식)

첫 번째로 삽입하는 수를 루트로 놓고, 그 뒤로 삽입하는 모든 수 X에 대해서 insert(X, root)를 호출하게 된다.

트리의 높이는 루트 노드로부터 리프 노드까지의 경로 중 가장 긴 경로 위에 존재하는 노드의 개수를 뜻한다. (리프 노드는 자식 노드가 없는 것을 의미한다.)

11부터 NN까지의 수를 BST에 삽입하려고 한다. 삽입 순서를 자유롭게 정할 수 있을 때 만들어지는 높이가 KK 이하인 BST의 가짓수를 구해보자. (BST의 루트 노드는 높이가 1로 가정한다.)

22 11 33 순으로 넣었을 때 생성되는 BST와 22 33 11 순으로 넣었을 때 생성되는 BST는 같은 경우이고, 33 22 11 4422 11 33 44 순으로 넣었을 때 생성되는 BST는 서로 다른 경우이다.

구하려는 경우의 수는 매우 커질 수 있으므로 답을 109+710^9+7로 나눈 나머지를 출력한다.

입력

첫 번째 줄에 두 정수 NN, KK이 공백으로 구분되어 주어진다. (1N3500,,1K121 \leq N \leq 3500,\\, 1 \leq K \leq 12)

출력

만들어지는 BST의 경우의 수를 109+710^9+7로 나눈 나머지를 출력한다.