빙고 게임

시간 제한1초메모리 제한128 MB

요약
1부터 M까지의 서로 다른 정수로 N x N 격자를 채우되 각 열은 위에서 아래로 증가하고 왼쪽 열의 모든 값보다 크며 총합이 S가 되는 격자의 수를 100000으로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

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

문제

어떤 프로그래밍 대회에서는 경기가 끝나면 뒤풀이로 빙고 게임을 하는 독특한 관습이 있습니다. 이 빙고 게임에서 쓰는 "빙고 표"는 보통 빙고와 달리, 아래 조건을 모두 만족하도록 빈 칸을 채워야 합니다.

  • 빙고 표는 NN행 NN열의 칸으로 이루어지고, 각 칸에는 정수 하나가 적혀 있습니다. 적힌 정수는 모두 서로 다릅니다.
  • 각 칸에 적힌 정수는 11 이상 MM 이하입니다.
  • N×NN \times N개의 정수의 총합은 SS입니다.
  • 모든 열은 위에서 아래로 내려갈수록 값이 커집니다(각 열이 오름차순).
  • 어떤 칸의 정수는 그 칸보다 왼쪽에 있는 열들의 모든 정수보다 커야 합니다.

예를 들어 N=5N = 5, M=50M = 50, S=685S = 685일 때 위 조건을 만족하는 빙고 표를 적어도 하나는 만들 수 있습니다. (각 열을 위에서 아래로 읽으면 값이 증가하고, 각 열의 값은 그 왼쪽 열들의 모든 값보다 큽니다.)

뒤풀이에 참석하려는 사람이 많아 최대한 많은 빙고 표를 만들려고 합니다. 다만 모든 사람이 자신만의 표를 원하므로 완전히 같은 표를 두 개 이상 만들 수는 없습니다. 만들 수 있는 서로 다른 빙고 표의 최대 개수를 100000100000으로 나눈 나머지를 출력하세요.

입력

입력은 한 줄이며, 세 정수 NN, MM, SS가 공백으로 구분되어 주어집니다. NN은 빙고 표의 크기(1≤N≤71 \le N \le 7), MM은 칸에 적을 수 있는 정수의 최댓값(1≤M≤20001 \le M \le 2000), SS는 표에 적힌 모든 정수의 총합(1≤S≤30001 \le S \le 3000)입니다.

주어지는 모든 입력에 대해, 조건을 만족하는 빙고 표를 적어도 하나는 만들 수 있음이 보장됩니다.

출력

만들 수 있는 서로 다른 빙고 표의 최대 개수를 100000100000으로 나눈 나머지를 한 줄에 출력하세요.

힌트

예를 들어 N=5N = 5, M=50M = 50, S=685S = 685인 경우 만들 수 있는 빙고 표는 모두 642499974501642499974501개이며, 이를 100000100000으로 나눈 나머지는 7450174501입니다.

예제3

  1. 예제 1

    입력
    3 9 45
    
    예상 출력
    1
    
  2. 예제 2

    입력
    3 100 50
    
    예상 출력
    7
    
  3. 예제 3

    입력
    5 50 685
    
    예상 출력
    74501