만드는 중입니다

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

좋은 트리의 개수

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

요약
kn개의 노드를 크기 k인 n개 블록으로 나누고, 같은 블록 안의 두 노드를 잇는 간선이 없는 트리의 개수를 10^9+7로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

유형
조합론, 수학, 행렬, 정수론
정답자
아직 제출이 없습니다

문제

좋은 트리는 다음 두 조건을 만족하는 트리다.

  • 노드는 k×nk \times n개이고 00번부터 k×n−1k \times n - 1번까지 번호가 붙어 있다.
  • 0≤i,j<k×n0 \le i, j < k \times n이고 i/k=j/ki / k = j / k인 두 노드 ii, jj는 서로 인접하지 않는다. 여기서 //는 정수 나눗셈이라서 7/2=37 / 2 = 3이다.

두 번째 조건은 번호를 앞에서부터 연속한 kk개씩 끊어 nn개의 묶음으로 나눴을 때, 같은 묶음에 속한 두 노드를 잇는 간선은 없다는 뜻이다. 나머지 노드 쌍은 간선으로 이어도 된다.

노드에는 번호가 붙어 있으므로 간선 집합이 다른 두 트리는 서로 다른 트리로 센다.

nn과 kk가 주어졌을 때, 좋은 트리의 개수를 세는 프로그램을 작성하시오.

입력

첫째 줄에 nn (1≤n≤1051 \le n \le 10^5)과 kk (1≤k≤31 \le k \le 3)가 공백으로 구분되어 주어진다.

출력

좋은 트리의 개수를 109+710^9 + 7로 나눈 나머지를 출력한다.

예제3

  1. 예제 1

    입력
    2 2
    
    예상 출력
    4
    
  2. 예제 2

    입력
    1 2
    
    예상 출력
    0
    
  3. 예제 3

    입력
    4 1
    
    예상 출력
    16