아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

블록으로 직사각형 채우기

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

요약
N행 M열 직사각형을 1×N, 2×N, …, N×N 블록(회전 가능)으로 빈틈없이 채우는 경우의 수를 1999로 나눈 나머지를 구한다.
난이도

보통10점 중 7점

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

문제

1×N1 \times N, 2×N2 \times N, …\dots, N×NN \times N 크기의 블록이 종류마다 무한히 있다. 이 블록으로 NN행 MM열 직사각형을 빈틈없이 채우려고 한다.

블록은 90∘90^\circ 돌려서 놓을 수 있다. 즉 k×Nk \times N 블록은 kk행 NN열로 놓을 수도 있고 NN행 kk열로 놓을 수도 있다. 블록끼리 겹치거나 직사각형 밖으로 나가면 안 된다.

어떤 칸을 덮는 블록의 위치나 모양이 한 군데라도 다르면 서로 다른 방법으로 센다. 채우는 방법의 수를 19991999로 나눈 나머지를 구하여라.

입력

첫째 줄에 NN과 MM이 공백을 사이에 두고 주어진다. (1≤N≤1001 \le N \le 100, 1≤M≤1041 \le M \le 10^4)

출력

채우는 방법의 수를 19991999로 나눈 나머지를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    2 12
    
    예상 출력
    732