좋은 트리의 개수

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

어려움8조합론수학행렬정수론아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

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

  • 노드는 k×nk \times n개이고 00번부터 k×n1k \times n - 1번까지 번호가 붙어 있다.
  • 0i,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개의 묶음으로 나눴을 때, 같은 묶음에 속한 두 노드를 잇는 간선은 없다는 뜻이다. 나머지 노드 쌍은 간선으로 이어도 된다.

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

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

입력

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

출력

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