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

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

난방 배관

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

요약
최대 10×10 격자에서 네 가지 고정 파이프 모양만 써서 왼쪽 위 위쪽 변에서 오른쪽 아래 오른쪽 변까지 이어지는 경로의 수를 구한다. 이미 놓인 파이프는 그대로 두고 정원 칸은 지날 수 없다.
난이도

보통10점 중 6점

유형
백트래킹, DFS, 구현, 행렬
정답자
아직 제출이 없습니다

문제

nn개의 열과 mm개의 행으로 이루어진 직사각형 영역 안에서, 왼쪽 위 칸 (1,1)(1, 1)의 위쪽 변과 오른쪽 아래 칸 (n,m)(n, m)의 오른쪽 변을 잇는 난방 배관을 만들어야 합니다. 배관은 파이프 조각들로 이루어지며, 각 칸에는 파이프를 최대 한 개만 놓을 수 있고, 그 파이프는 칸의 네 변 중 정확히 두 변을 잇습니다.

그림 1. 네 가지 파이프 종류.

사용할 수 있는 파이프는 네 종류뿐이며, 회전할 수 없습니다:

  • 파이프 1은 위쪽 변과 오른쪽 변을 잇습니다.
  • 파이프 2는 아래쪽 변과 왼쪽 변을 잇습니다.
  • 파이프 3은 왼쪽 변과 오른쪽 변을 잇습니다.
  • 파이프 4는 위쪽 변과 아래쪽 변을 잇습니다.

즉, 위쪽 변과 왼쪽 변을 잇는 파이프나 오른쪽 변과 아래쪽 변을 잇는 파이프는 존재하지 않습니다.

이웃한 두 칸의 파이프는, 두 칸이 맞닿은 변에 양쪽 파이프의 끝이 모두 있을 때에만 연결됩니다. 배관에 속한 이웃 칸끼리는 공통 변에서 파이프 끝이 서로 맞닿아야 합니다. 배관 전체는 영역 안에 있어야 하며, 어떤 파이프도 영역 밖으로 나갈 수 없습니다.

그림 2. 예시 영역 (n = 4, m = 5). 칸 (4, 2)에는 정원이 있습니다.

처음에 각 칸은 다음 중 하나입니다:

  • 빈 칸 — 네 종류 중 아무 파이프나 새로 놓을 수 있습니다;
  • 이미 놓인 파이프 (종류 1~4) — 배관의 연결 고리로 사용할 수 있지만 다른 파이프로 바꿀 수는 없으며, 배관이 사용하지 않고 그대로 둘 수도 있습니다;
  • 정원 — 배관은 이 칸을 사용할 수 없습니다.

그림 2의 영역에서는 배관을 정확히 세 가지 방법으로 만들 수 있으며, 그 방법은 그림 3에 나와 있습니다.

그림 3. 예시 영역에서 배관을 만드는 세 가지 방법.

서로 다른 난방 배관을 몇 가지 방법으로 만들 수 있는지 세는 프로그램을 작성하세요.

입력

첫째 줄에 두 정수 nn과 mm (1≤n≤101 \le n \le 10, 1≤m≤101 \le m \le 10)이 공백으로 구분되어 주어집니다. 각각 열의 수와 행의 수입니다.

다음 mm개의 줄에는 각각 nn개의 정수가 공백으로 구분되어 주어집니다. 이 줄들 중 ii번째 줄의 jj번째 정수는 ii번째 행, jj번째 열의 칸을 나타냅니다:

  • 00 — 빈 칸;
  • 11~44 — 그림 1의 해당 종류로 이미 놓인 파이프;
  • 55 — 정원.

출력

서로 다른 난방 배관을 만들 수 있는 방법의 수를 정수 하나로 출력합니다.

예제2

  1. 예제 1

    입력
    4 5
    0 0 3 2
    0 4 0 5
    4 0 0 0
    4 0 1 0
    0 3 0 0
    
    예상 출력
    3
    
  2. 예제 2

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