N행 M열 직사각형을 1×N, 2×N, …, N×N 블록(회전 가능)으로 빈틈없이 채우는 경우의 수를 1999로 나눈 나머지를 구한다.
1×N1 \times N1×N, 2×N2 \times N2×N, …\dots…, N×NN \times NN×N 크기의 블록이 종류마다 무한히 있다. 이 블록으로 NNN행 MMM열 직사각형을 빈틈없이 채우려고 한다.
블록은 90∘90^\circ90∘ 돌려서 놓을 수 있다. 즉 k×Nk \times Nk×N 블록은 kkk행 NNN열로 놓을 수도 있고 NNN행 kkk열로 놓을 수도 있다. 블록끼리 겹치거나 직사각형 밖으로 나가면 안 된다.
어떤 칸을 덮는 블록의 위치나 모양이 한 군데라도 다르면 서로 다른 방법으로 센다. 채우는 방법의 수를 199919991999로 나눈 나머지를 구하여라.
첫째 줄에 NNN과 MMM이 공백을 사이에 두고 주어진다. (1≤N≤1001 \le N \le 1001≤N≤100, 1≤M≤1041 \le M \le 10^41≤M≤104)
채우는 방법의 수를 199919991999로 나눈 나머지를 한 줄에 출력한다.