바이타자르는 컴퓨터 프로그램의 도움을 받아 n개의 서랍 사이에서 k개의 블록을 옮기는 방법을 완벽하게 익혔다. 그런데 같은 재주를 부릴 수 있는 사람이 많다는 사실을 알게 되었고, 바이톨리나의 관심을 끌기 위해 더 복잡한 묘기를 고안해야 한다.
이번에 바이타자르에게는 1,2,…,2n으로 번호가 매겨진 2n개의 블록과 크기가 2×n인 판이 있다. 그는 일부 블록을 판 위에 한 칸에 하나씩 올려 둔다. 이제 남은 블록들을 빈 칸에 배치하는 방법이 몇 가지인지 궁금하다. 단, 모든 행과 모든 열에서 블록 번호가 증가하는 순서로 놓여야 한다.
다음을 수행하는 프로그램을 작성하시오.
첫째 줄에 정수 n (1≤n≤1000)이 주어진다. 이어지는 두 줄은 판의 상태를 나타내며, 각 줄에는 n개의 정수 ai (0≤ai≤2n)가 공백으로 구분되어 주어진다. 첫 번째 줄은 판의 윗줄, 두 번째 줄은 아랫줄에 해당한다. 0은 그 칸이 비어 있음을, 양수는 그 칸에 놓인 블록의 번호를 뜻한다. 각 블록은 판 위에 최대 한 번만 놓여 있다.
남은 블록들을 판에 배치하는 방법의 수를 정수 하나로 출력한다. 블록 번호는 모든 행에서 왼쪽에서 오른쪽으로, 모든 열에서 위에서 아래로 증가해야 한다.