산타클로스와 루돌프

아직 제출이 없습니다시간 제한12초메모리 제한128 MB

문제

산타클로스는 어떤 동네에 사는 모든 아이에게 선물을 나누어 주려고 한다. 동네의 모든 집에는 아이가 살고 있으므로, 산타는 모든 집을 빠짐없이 방문해 선물을 주어야 한다. 올해 산타를 태우고 다닐 루돌프는 길을 잘 못 찾아서, 건물이 아닌 곳에는 내릴 수 없다. 그래서 산타는 선물을 나누어 줄 방법을 미리 계획하려고 한다.

동네는 1×1 크기의 칸들로 나뉘어 있고, 각 칸은 집, 교회, 공터 중 하나이다. 교회는 정확히 한 곳뿐이다. 산타와 루돌프는 교회에서 출발하여 모든 집에 선물을 나누어 준 뒤 다시 교회로 돌아와야 하며, 다음 규칙을 지켜야 한다.

  1. 루돌프는 동, 서, 남, 북 네 방향으로만 직선으로 날 수 있고, 공중에서는 방향을 바꿀 수 없다.
  2. 아직 선물을 주지 않은 집 위는 자유롭게 지나갈 수 있다. 그런 집에 내리면 반드시 선물을 주어야 하고, 그 다음 다시 네 방향 중 하나로 날아오른다.
  3. 모든 집에는 벽난로가 있다. 산타가 오기 전에는 불이 꺼져 있다. 같은 집에 두 번 선물을 주지 않기 위해, 산타는 날아오를 때 벽난로에 불을 붙인다. 불을 붙이면 굴뚝에서 연기가 나므로, 이미 선물을 준 집 위는 지나갈 수 없다.
  4. 교회 위는 자유롭게 지나갈 수 있다. 다만 예배 중이므로, 모든 집에 선물을 다 주기 전에는 교회에 내릴 수 없다.
  5. 공터 위는 자유롭게 지나갈 수 있지만, 공터에는 내릴 수 없다.

동네의 구조가 주어졌을 때, 산타와 루돌프가 선물을 나누어 줄 수 있는 방법의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 동네의 가로 크기 $m$과 세로 크기 $n$이 공백으로 구분되어 주어진다. ($1 \le m, n \le 10$) 다음 $n$개의 줄에는 각각 $m$개의 수가 공백으로 구분되어 주어진다. 각 수는 해당 칸의 상태를 나타내며 0, 1, 2 중 하나이다. 0은 공터, 1은 집, 2는 교회를 뜻한다. 교회는 항상 정확히 1개이고, 집의 개수는 1개 이상 23개 이하이다.

출력

첫째 줄에 선물을 나누어 줄 수 있는 방법의 수를 출력한다. 이 값은 2,000,000 이하임이 보장된다.