만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

조명 배치

시간 제한8초메모리 제한1024 MB

요약
벽과 빈 칸으로 이루어진 격자에서 모든 빈 칸이 빛을 받도록 조명을 놓는 경우의 수를 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 트리, 그래프
정답자
아직 제출이 없습니다

문제

가로세로로 정렬된 정사각형 칸들이 직사각형을 이루는 던전의 지도가 주어진다. 각 칸은 벽이거나 빈 칸이다. 이 던전에는 열린 공간이 없다. 구체적으로 다음 두 조건을 만족한다.

  1. 빈 칸으로 이루어진 2×22 \times 2 이상의 블록이 없다.
  2. 대각선 방향으로 연속해서 일직선을 이루는 빈 칸이 세 개 이상 없다.

조명을 여러 개 가지고 있다. 빈 칸에 조명을 놓으면 그 칸과 위, 아래, 왼쪽, 오른쪽 네 방향으로 이어진 빈 칸들을 모두 밝힌다. 각 빈 칸에는 조명을 최대 하나까지 놓을 수 있으며, 조명을 놓는 칸의 수에는 제한이 없다.

모든 빈 칸을 밝히는 조명 배치 방법의 수를 구하라.

입력

여러 개의 데이터 세트가 주어진다. 각 데이터 세트는 다음 형식으로 주어진다.

n m
c1,1 ... c1,m
...
cn,1 ... cn,m

nn은 세로 방향, mm은 가로 방향의 칸 수이며, 1≤n≤301 \le n \le 30, 1≤m≤301 \le m \le 30을 만족한다. ci,jc_{i,j}는 '#' 또는 '.' 문자이다. '#'이면 위에서 ii번째, 왼쪽에서 jj번째 칸이 벽이고, '.'이면 빈 칸이다. 입력의 끝은 0 0으로 이루어진 줄로 표시한다. 데이터 세트는 50개를 넘지 않는다.

출력

각 데이터 세트에 대해, 모든 빈 칸을 밝히는 조명 배치 방법의 수를 109+710^9+7로 나눈 나머지를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    2 2
    .#
    #.
    3 3
    ...
    .#.
    ...
    2 3
    #..
    ..#
    3 3
    #.#
    ...
    #.#
    3 5
    .#.#.
    .....
    #.#.#
    0 0
    
    예상 출력
    1
    161
    9
    25
    243