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

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

마법의 직사각형

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

요약
3행 N열 격자에 1부터 3N까지 숫자를 행과 열이 모두 증가하도록 미리 채운 칸에 맞춰 넣는 경우의 수를 1000007로 나눈 나머지를 구합니다.
난이도

보통10점 중 7점

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

문제

33개의 행과 NN개의 열로 이루어진 직사각형이 있습니다. 각 칸에 11부터 3N3N까지의 정수를 한 번씩 써넣어, 모든 행에서는 왼쪽에서 오른쪽으로, 모든 열에서는 위에서 아래로 숫자가 커지도록 만들려고 합니다. 이렇게 채우는 방법은 모두 몇 가지일까요?

일부 칸의 값은 이미 정해져 있을 수 있습니다. 가능한 방법의 수가 매우 커질 수 있으므로, 그 수를 10000071000007로 나눈 나머지를 출력하면 됩니다.

입력

첫째 줄에 자연수 NN (1≤N≤2001 \le N \le 200)이 주어집니다.

이어지는 세 줄에는 직사각형의 각 행이 위에서부터 순서대로, 각 행 안에서는 왼쪽에서 오른쪽 순서로 주어집니다. 각 줄에는 NN개의 정수 ai,ja_{i,j} (0≤ai,j≤3N0 \le a_{i,j} \le 3N)가 있습니다. ai,j=0a_{i,j} = 0은 그 칸의 값이 아직 정해지지 않았음을 뜻하고, 그 외의 경우에는 그 칸의 값이 ai,ja_{i,j}임을 뜻합니다.

출력

조건을 만족하도록 채우는 방법의 수를 10000071000007로 나눈 나머지를 한 줄에 출력합니다.

예제1

  1. 예제 1

    입력
    2
    0 0
    0 0
    0 0
    
    예상 출력
    5