도로 건설

거리가 K 이하인 집들 사이에 정확히 M개의 양방향 도로를 놓되 모든 집의 차수가 짝수가 되도록 하는 경우의 수를 1,000,000,007로 나눈 나머지로 구한다.

어려움8동적 계획법조합론그래프비트 연산아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

영선이가 사는 도시에는 집이 NN개 있고, 1번부터 NN번까지 번호가 붙어 있다. 지금 이 도시에는 도로가 하나도 없다. 영선이는 아래 두 조건을 지키면서 집과 집을 잇는 양방향 도로를 정확히 MM개 만들려고 한다.

  • 서로 다른 두 집 AABB0<ABK0 < |A - B| \le K일 때만 도로로 이을 수 있다. 도로로 이어진 두 집은 서로 인접하다고 한다. 같은 집의 쌍을 잇는 도로를 여러 개 만들 수 있다.
  • 모든 집은 짝수 개의 도로와 인접해야 한다.

어떤 집의 쌍을 잇는 도로의 개수가 서로 다르면 두 방법을 다른 방법으로 센다. NN, MM, KK가 주어졌을 때 도로를 만드는 방법의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 NN, MM, KK가 주어진다. (1N301 \le N \le 30, 0M300 \le M \le 30, 1K81 \le K \le 8)

출력

첫째 줄에 도로를 만드는 방법의 수를 1,000,000,007로 나눈 나머지를 출력한다.

힌트

첫 번째 예제에서는 아래와 같이 도로를 건설할 수 있다.

두 번째 예제에서는 아래와 같이 도로를 건설할 수 있다.