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

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

Winmine (지뢰찾기)

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

요약
드러난 숫자 각각이 주변 지뢰 수와 일치하도록 남은 지뢰를 미공개 칸에 배치하는 경우의 수를 1000003으로 나눈 나머지로 구한다.
난이도

어려움10점 중 9점

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

문제

지뢰찾기(Winmine)는 윈도우에 기본으로 들어 있는 유명한 게임이다. 규칙은 간단하다. 지뢰가 없는 칸을 모두 열면 이기고, 지뢰가 있는 칸을 열면 진다.

칸을 열면 그 아래에 무엇이 있는지 드러난다. 어떤 칸은 비어 있고(주변에 지뢰가 없음), 어떤 칸에는 1부터 8까지의 숫자가 적혀 있다. 이 숫자는 그 칸과 인접한 8개 칸에 들어 있는 지뢰의 개수를 뜻한다. 비어 있는 칸(숫자 0)을 열면 인접한 빈 칸들이 연쇄적으로 함께 열린다.

Jaddy는 이 게임을 즐기지만, 가끔 논리만으로는 지뢰의 위치를 확정할 수 없는 상황에 부딪힌다. 아래 그림이 그런 예이다.

빨간 원 안의 두 칸은 어느 쪽에 지뢰가 있는지 확정할 수 없으며, 남은 지뢰 1개를 배치하는 방법이 명백히 두 가지 있다.

이런 상황에서는 추측에 의존할 수밖에 없다. 그래서 Jaddy는 현재 판의 상태를 보고, 남은 지뢰를 배치할 수 있는 서로 다른 경우의 수를 세어 주는 도구를 원한다. 그를 도와주자.

문제를 쉽게 하기 위해 입력에는 다음 두 조건이 보장된다.

  1. 주어지는 판의 상태는 초기 판에서 단 한 번의 클릭으로 만들어 낼 수 있는 상태이다.
  2. 아직 열리지 않은 칸들에 대해, 두 칸이 (사이의 다른 열리지 않은 칸들을 거쳐서라도) 연결되어 있다면, 이 두 칸은 이중 연결(biconnected)되어 있다. 즉, 다른 열리지 않은 칸 중 어느 하나를 제거하더라도 두 칸은 여전히 연결된 상태로 남는다. 여기서 두 칸이 연결되어 있다는 것은 변을 공유한다는 뜻이므로, 한 칸은 최대 4개의 칸과 연결된다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 첫 줄에 테스트 케이스의 수를 나타내는 양의 정수 TT (T≤50T \le 50)가 주어진다. 이어서 TT개의 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 줄에는 세 양의 정수 nn, mm, ww가 주어진다 (1≤n,m≤1001 \le n, m \le 100, 1≤w≤10001 \le w \le 1000). nn과 mm은 각각 판의 행과 열의 수이고, ww는 판 전체에 놓인 지뢰의 총 개수이다.

그다음 줄부터 현재 판의 상태를 나타내는 n×mn \times m 문자 격자가 주어진다. 각 문자는 다음 둘 중 하나이다.

  • 숫자 0부터 8: 그 칸에 인접한 8개 칸에 들어 있는 지뢰의 개수 (0은 인접한 지뢰가 없는 빈 칸).
  • . (마침표): 아직 열리지 않은 칸.

출력

각 테스트 케이스마다 한 줄씩, Case #k: X 형식으로 출력한다. 여기서 kk는 테스트 케이스 번호(1부터 시작)이고, XX는 주어진 상태에서 지뢰를 배치할 수 있는 서로 다른 경우의 수를 10000031000003으로 나눈 나머지이다.

예제5

  1. 예제 1

    입력
    2
    4 5 2
    .....
    .....
    11111
    00000
    4 5 4
    .....
    .....
    22222
    00000
    
    예상 출력
    Case #1: 2
    Case #2: 1
    
  2. 예제 2

    입력
    1
    5 3 3
    ...
    ...
    ...
    121
    000
    
    예상 출력
    Case #1: 6
    
  3. 예제 3

    입력
    1
    6 3 4
    ...
    ...
    ...
    ...
    121
    000
    
    예상 출력
    Case #1: 36
    
  4. 예제 4

    입력
    1
    6 5 6
    00000
    12121
    .....
    .....
    12121
    00000
    
    예상 출력
    Case #1: 1
    
  5. 예제 5

    입력
    1
    4 6 3
    ......
    ......
    221111
    000000
    
    예상 출력
    Case #1: 1