조명 배치
시간 제한8초메모리 제한1024 MB
벽과 빈 칸으로 이루어진 격자에서 모든 빈 칸이 빛을 받도록 조명을 놓는 경우의 수를 10^9+7로 나눈 나머지로 구합니다.
문제
가로세로로 정렬된 정사각형 칸들이 직사각형을 이루는 던전의 지도가 주어진다. 각 칸은 벽이거나 빈 칸이다. 이 던전에는 열린 공간이 없다. 구체적으로 다음 두 조건을 만족한다.
- 빈 칸으로 이루어진 이상의 블록이 없다.
- 대각선 방향으로 연속해서 일직선을 이루는 빈 칸이 세 개 이상 없다.

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

모든 빈 칸을 밝히는 조명 배치 방법의 수를 구하라.
입력
여러 개의 데이터 세트가 주어진다. 각 데이터 세트는 다음 형식으로 주어진다.
n m
c1,1 ... c1,m
...
cn,1 ... cn,m
은 세로 방향, 은 가로 방향의 칸 수이며, , 을 만족한다. 는 '#' 또는 '.' 문자이다. '#'이면 위에서 번째, 왼쪽에서 번째 칸이 벽이고, '.'이면 빈 칸이다. 입력의 끝은 0 0으로 이루어진 줄로 표시한다. 데이터 세트는 50개를 넘지 않는다.
출력
각 데이터 세트에 대해, 모든 빈 칸을 밝히는 조명 배치 방법의 수를 로 나눈 나머지를 한 줄에 출력한다.