CYK의 너무너무 재밌는 그래프 만들기 놀이

K가지 색으로 정점을 칠하고 각 정점에서 색이 다른 작은 정점으로 최대 하나의 간선을 그리는 경우의 수를 1000000007로 나눈 나머지를 구합니다.

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

문제

정점이 NN개인 그래프를 만든다. 정점에는 11부터 NN까지 번호를 매기고, 각 정점에 KK가지 색 중 하나를 칠한다. 색을 칠하는 방법에는 아무 제한이 없다.

색을 다 칠하면 간선을 추가한다. 간선은 다음 두 규칙을 지켜야 한다.

  • 1j<iN1 \le j < i \le N이고 정점 ii와 정점 jj의 색이 서로 다르면, ii에서 jj로 향하는 간선을 추가할 수 있다. 추가하지 않아도 된다.
  • 2iN2 \le i \le N인 정점 ii에서 나가는 간선은 최대 한 개다. 즉 정점 ii의 out-degree가 11을 넘지 않는다.

정점 11에서는 번호가 더 작은 정점이 없으므로 나가는 간선을 만들 수 없다.

두 그래프는 모든 정점의 색이 같고 이어진 간선의 집합도 같을 때 서로 같다고 본다. 예를 들어 N=3N = 3, K=2K = 2이면 아래 그림처럼 서로 다른 그래프가 24개 나온다.

NNKK가 주어질 때, 서로 다른 그래프의 개수를 1,000,000,007로 나눈 나머지를 구하라.

입력

첫 줄에 정점의 개수 NN (1N1001 \le N \le 100)과 쓸 수 있는 색의 개수 KK (1K31 \le K \le 3)가 공백 한 개로 구분되어 주어진다.

출력

서로 다른 그래프의 개수를 1,000,000,007로 나눈 나머지를 한 줄에 출력한다.