#codefestival2016finali. [codefestival_2016_final_i]Reverse Grid

[codefestival_2016_final_i]Reverse Grid

题目描述

Snuke有一个 HHWW 列的网格。第 ii 行第 jj 列的方格中包含一个字符 Si,jS_{i,j}

他可以对网格执行以下两种操作:

  • 行反转:选择一行,翻转该行中的方格的顺序。
  • 列反转:选择一列,翻转该列中的方格的顺序。

例如,先反转第 22 行,然后反转第 44 列,结果如下图所示:

通过以任意次数以任意顺序执行这些操作,可以得到多少种字符在网格上的放置方式?

约束条件

  • 1H,W2001≤H,W≤200
  • Si,jS_{i,j} 是小写英文字母 (a-z)。

输入

输入以以下格式从标准输入给出:

HH WW S1,1S_{1,1}S1,2S_{1,2}......S1,WS_{1,W} S2,1S_{2,1}S2,2S_{2,2}......S2,WS_{2,W} :: SH,1S_{H,1}SH,2S_{H,2}......SH,WS_{H,W}

输出

打印可以获得的字符放置方式的数量,对 10000000071000000007 取模(=109+7=10^9+7)。


示例输入 1

2 2
cf
cf

示例输出 1

6

可以得到以下 66 种字符放置方式:


示例输入 2

1 12
codefestival

示例输出 2

2