acm International Collegiate Programming Contest

Links

A B C D E F G H

Problem G

灯りの配置

いくつかの正方形のマスを並べた長方形のダンジョンの地図が与えられる. 各マスは壁か空きマスのいずれかである. ダンジョン内には開けた空間はない. 具体的には,以下の 2 つの条件を満たしている.

  1. ダンジョン内には全てが空きマスである 2 × 2 以上の大きさの領域はない.
  2. 斜め方向に空きマスが 3 つ連続することはない.
Open Space

あなたは灯りをたくさん持っていて,灯りを空きマスに設置すれば,そのマスとそこから上下左右の 4 方向に一直線に連続する空きマスを全て明るくすることができる. 灯りは各空きマスに高々 1 つ設置でき,何個所に設置しても構わない.

Example

全ての空きマスを明るくするような灯りの配置の総数を求めよ.

Input

入力は複数のデータセットからなる. 各データセットは次の形式で表される.

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

n, m はそれぞれ縦方向,横方向のマスの数を表し,1 ≤ n ≤ 30, 1 ≤ m ≤ 30 を満たす. ci,j は '#' または '.' の 1 文字で, '#' ならば上から i 番目,左から j 番目のマスは壁, '.' ならば空きマスである.

入力の終わりは,空白で区切られた 2 つのゼロだけからなる行で表される. データセットは 50 個以内である.

Output

各データセットについて,全ての空きマスを明るくするような灯りの配置の総数を 109+7 で割った余りを 1 行で出力せよ.

Sample Input

2 2
.#
#.
3 3
...
.#.
...
2 3
#..
..#
3 3
#.#
...
#.#
3 5
.#.#.
.....
#.#.#
0 0

Output for the Sample Input

1
161
9
25
243
(End of Problem G) A B C D E F G H