#arc157d. [arc157_d]YY Garden

[arc157_d]YY Garden

問題文

HHWW 列のマス目の各マスに X, Y のいずれかの文字が書かれています. 上から ii 行目,左から jj 列目のマスを (i,j)(i, j) で表します. マス目に書かれている文字は HH 個の文字列 S1,S2,dots,SHS_1, S_2, \\dots, S_H によって与えられ,SiS_ijj 文字目がマス (i,j)(i, j) に書かれた文字を表します.

隣り合う各行および各列の間に,マス目全体を横断(縦断)するように柵を設置できます. 柵同士は交差しても構いません. 柵の設置後に,「あるマスから始めて上下左右に隣接するマスへの移動を繰り返すことで,柵を越えずに到達可能なマス全体」を区画と定義します. (出力例 1 の説明も参考にしてください.)

柵の設置方法は全部で 2H1times2W12^{H-1} \\times 2^{W-1} 通りありますが,そのうち次の条件を満たすものの個数を 998244353998244353 で割った余りを求めてください.

条件: 各区画には Y が書かれたマスがちょうど 22 個含まれている.

制約

  • 1leqHleq20001 \\leq H \\leq 2000
  • 1leqWleq20001 \\leq W \\leq 2000
  • Si(1leqileqH)S_i \\ (1 \\leq i \\leq H)X, Y からなる長さ WW の文字列である.

入力

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

HH WW S1S_1 S2S_2 vdots\\vdots SHS_H

出力

条件を満たす柵の設置方法の総数を 998244353998244353 で割った余りを出力せよ.


入力例 1

2 3
XYY
YXY

出力例 1

2

柵の設置方法として,以下の 88 通りがあります.

X Y Y    X|Y Y    X Y|Y    X|Y|Y
          |          |      | |
Y X Y    Y|X Y    Y X|Y    Y|X|Y


X Y Y    X|Y Y    X Y|Y    X|Y|Y
-----    -+---    ---+-    -+-+-
Y X Y    Y|X Y    Y X|Y    Y|X|Y

たとえば,2,32, 3 列目の間に柵を設置した場合,区画は

XY
YX
``````plain
Y
Y

であり,それぞれにちょうど 22 個の Y が含まれているので,条件を満たします.

また,1,21, 2 行目の間と 1,21, 2 列目の間に柵を設置した場合,区画は

X
``````plain
YY
``````plain
Y
``````plain
XY

となり,22 つ目の区画以外にはちょうど 22 個の Y が含まれていないので,条件を満たしません.


入力例 2

2 3
XYX
YYY

出力例 2

0

どのように柵を設置しても条件を満たしません.


入力例 3

2 58
YXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXY
YXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXY

出力例 3

164036797

条件を満たす柵の設置方法の総数を 998244353998244353 で割った余りを出力してください.