atcoder#KEYENCE2020F. Monochromization

Monochromization

题目描述

H × W H\ \times\ W のマス目があり、各マスは初期状態で白または黒に塗られています。 初期状態における各マスの塗られ方を表す文字列 A1, A2, ..., AH A_1,\ A_2,\ ...,\ A_H が与えられます。 これらの文字列は、各 (i, j) (i,\ j) (1  i  H 1\ \leq\ i\ \leq\ H , 1  j  W 1\ \leq\ j\ \leq\ W ) について、 文字列 Ai A_i j j 文字目が . ならば i i j j 列のマスは白に、 # ならば i i j j 列のマスは黒に塗られていることを表します。

このマス目の各マスの白または黒による塗られ方 (全部で 2HW 2^{HW} 個あります) であって、 初期状態から以下の操作を好きな順番で好きな回数 (0 0 回以上) 繰り返して得られるものの個数を 998 998 244 244 353 353 で割ったあまりを求めてください。

  • ある行を一つ選び、その行に含まれるすべてのマスを白く塗る。
  • ある行を一つ選び、その行に含まれるすべてのマスを黒く塗る。
  • ある列を一つ選び、その列に含まれるすべてのマスを白く塗る。
  • ある列を一つ選び、その列に含まれるすべてのマスを黒く塗る。

输入格式

入力は以下の形式で標準入力から与えられる。

H H W W A1 A_1 A2 A_2 \vdots AH A_H

输出格式

答えを出力せよ。

题目大意

我们有一个H×WH \times W的网格,每个正方形都被涂成黑色或白色。

给定字符串A1,A2,...,AHA_1,A_2,...,A_H,表示初始每一个正方形的颜色。AiA_i的第jj个字符表示(i,j)(i,j)的颜色。“..”表示白色,“#”表示黑色。

规定以下几种操作:

  1. 选择一行,然后将该行中的所有正方形涂成白色。

  2. 选择一行,然后将该行中的所有正方形涂成黑色。

  3. 选择一列,然后将该列中的所有正方形白色。

  4. 选择一列,然后将该列中的所有正方形涂成黑色。

试求在将网格涂色的2HW2^{HW}种方法中,通过以任何顺序执行任何次数操作,可以从初始状态获得多少种不同的结果?结果对998244353998244353取模。

输入格式:

第一行输入两个数H,WH,W,后面HH行分别输入A1,A2,...,AHA_1,A_2,...,A_H

输出格式:

一行,直接输出答案。

数据范围:

1H,W101≤H,W≤10,且H,WH,W为正整数。

Ai=W(1iH)|A_i|=W (1≤i≤H),且保证AiA_i由“..”和“#”组成。

2 2
#.
.#
15
3 3
...
...
...
230
2 4
#...
...#
150
6 7
.......
.......
.#.....
..#....
.#.#...
.......
203949910

提示

制約

  • 1  H, W  10 1\ \leq\ H,\ W\ \leq\ 10
  • Ai = W |A_i|\ =\ W (1  i  H 1\ \leq\ i\ \leq\ H )
  • すべての Ai A_i は文字 . と文字 # だけからなる。
  • H H および W W は整数である。

Sample Explanation 1

たとえば、2 2 行目を黒く塗って得られるマス目は以下のとおりです。 #. ##