블록 4

1부터 N까지의 k에 대해 k×N 블록(회전 가능)을 사용해 N×M 직사각형을 채우는 경우의 수를 1999로 나눈 나머지를 구한다. M은 최대 10^10이다.

어려움8동적 계획법수학조합론행렬아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

여러 크기의 블록으로 직사각형을 채우려고 한다. 1×N1 \times N 블록, 2×N2 \times N 블록, ..., N×NN \times N 블록이 각각 무한히 많다. 블록은 90도 돌려서 놓아도 된다. 즉 k×Nk \times N 블록은 세로 kk 칸 가로 NN 칸으로 놓을 수도 있고, 세로 NN 칸 가로 kk 칸으로 놓을 수도 있다.

이 블록으로 세로 NN 칸, 가로 MM 칸인 직사각형을 빈틈없이 겹치지 않게 채우는 방법의 수를 구하여라. 크기가 같은 블록은 서로 구분하지 않으므로, 채운 모양이 같으면 같은 방법이다. 답이 매우 커질 수 있으니 19991999로 나눈 나머지를 출력한다.

입력

첫째 줄에 NNMM이 공백 하나를 사이에 두고 주어진다. (1N1031 \le N \le 10^3, 1M10101 \le M \le 10^{10})

출력

첫째 줄에 직사각형을 채우는 방법의 수를 19991999로 나눈 나머지를 출력한다.