AT_abc311_f [ABC311F] Yet Another Grid Task
Description
[problemUrl]: https://atcoder.jp/contests/abc311/tasks/abc311_f
$ N\ \times\ M $ のグリッドがあります。
このグリッドの上から $ i $ 行目、左から $ j $ 列目のマスを $ (i,j) $ と書きます。
このグリッドの各マスは 白 か 黒 であり、その情報は $ N $ 個の長さ $ M $ の文字列 $ S_1,S_2,\dots,S_N $ として与えられます。
- もし $ S_i $ の $ j $ 文字目が `.` なら、マス $ (i,j) $ は 白 である。
- もし $ S_i $ の $ j $ 文字目が `#` なら、マス $ (i,j) $ は 黒 である。
以下の条件を満たすグリッドを **美しい** グリッドと呼びます。
- 全ての $ 1\ \le\ i\ \le\ N,\ 1\ \le\ j\ \le\ M $ を満たす整数組 $ (i,j) $ について、マス $ (i,j) $ が 黒 であれば、その下と右下のマスも (存在すれば) 黒 である。
- 厳密には、以下の条件を全て満たす。
- マス $ (i,j) $ が 黒 でありマス $ (i+1,j) $ が存在するなら、マス $ (i+1,j) $ も 黒 である。
- マス $ (i,j) $ が 黒 でありマス $ (i+1,j+1) $ が存在するなら、マス $ (i+1,j+1) $ も 黒 である。
高橋くんは、 白 のマスを $ 0 $ 個以上何個でも 黒 に塗ることができ、この操作によってグリッドを美しくしようとしています。
高橋くんが作ることのできる美しいグリッドの種類数を $ 998244353 $ で割った余りを求めてください。
但し、ある $ 2 $ つのグリッドが異なるとは、両者で色が異なるマスが存在することを指します。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ M $ $ S_1 $ $ S_2 $ $ \vdots $ $ S_N $
Output Format
答えを整数として出力せよ。
Explanation/Hint
### 制約
- $ 1\ \le\ N,M\ \le\ 2000 $
- $ S_i $ は `.` と `#` からなる長さ $ M $ の文字列
### Sample Explanation 1
作ることのできる美しいグリッドは以下の $ 3 $ 種類です。 ``` .# .# ## .# ## ## ```
### Sample Explanation 3
$ 998244353 $ で割った余りを求めてください。