만드는 중입니다

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

함수

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

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

어려움10점 중 8점

유형
조합론, 동적 계획법, 수학, 그래프
정답자
아직 제출이 없습니다

문제

이 문제에서 함수는 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
  • 모든 올바른 xx와 jj에 대해 fj+1(x)=fj(f(x))f^{j+1}(x) = f^j(f(x))

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

  • G(f,w)G(f, w)는 1≤x≤n1 \le x \le n인 xx와 ww 이상인 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의 집합이다.

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

입력

첫째 줄에 nn과 kk가 공백으로 구분되어 주어진다. (1≤n≤50001 \le n \le 5000, 0≤k≤n0 \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

aa와 dd는 A(1)A(1)에 속하고, bb와 cc는 A(2)A(2)에 속한다.

예제7

  1. 예제 1

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

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

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

    입력
    3 1
    
    예상 출력
    9
    
  5. 예제 5

    입력
    3 3
    
    예상 출력
    6
    
  6. 예제 6

    입력
    5 3
    
    예상 출력
    900
    
  7. 예제 7

    입력
    5000 5000
    
    예상 출력
    541108809