함수

정의역과 공역이 {1, …, n}인 함수 중에서, 충분히 반복해 적용했을 때 도달하는 값들의 집합 크기가 정확히 k인 함수의 개수를 1,000,000,007로 나눈 나머지로 구한다.

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

문제

이 문제에서 함수는 1부터 nn까지의 정수를 1부터 nn까지의 정수로 보내는 함수를 뜻한다. 예를 들어 n=3n = 3일 때 g(1)=1g(1) = 1, g(2)=3g(2) = 3, g(3)=1g(3) = 1은 가능한 함수 gg의 한 예이다.

fj(x)f^j(x)는 다음과 같이 정의한다.

  • 모든 올바른 xx에 대해 f0(x)=xf^0(x) = x
  • 모든 올바른 xxjj에 대해 fj+1(x)=fj(f(x))f^{j+1}(x) = f^j(f(x))

새로운 표현은 다음과 같이 정의한다.

  • G(f,w)G(f, w)1xn1 \le x \le nxxww 이상인 rr에 대한 fr(x)f^r(x) 값의 집합이다.
  • S(f,w)S(f, w)G(f,w)G(f, w)의 크기이다.
  • Z(f)Z(f)는 모든 음이 아닌 정수 ww에 대한 S(f,w)S(f, w)의 최솟값이다.
  • A(y)A(y)Z(f)=yZ(f) = y인 함수 ff의 집합이다.

nnkk가 주어졌을 때, A(k)A(k)의 크기를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 nnkk가 공백으로 구분되어 주어진다. (1n50001 \le n \le 5000, 0kn0 \le k \le n)

출력

첫째 줄에 A(k)A(k)의 크기를 1,000,000,007로 나눈 나머지를 출력한다.

힌트

n=2n = 2이면 함수를 모두 4개 만들 수 있다. 이를 각각 aa, bb, cc, dd라고 하면 다음과 같다.

  • a(1)=1a(1) = 1, a(2)=1a(2) = 1
  • b(1)=1b(1) = 1, b(2)=2b(2) = 2
  • c(1)=2c(1) = 2, c(2)=1c(2) = 1
  • d(1)=2d(1) = 2, d(2)=2d(2) = 2

aaddA(1)A(1)에 속하고, bbccA(2)A(2)에 속한다.