#D8101. Reverse Grid
Reverse Grid
Reverse Grid
Snuke has a grid with H rows and W columns. The square at the i-th row and j-th column contains a character S_{i,j}.
He can perform the following two kinds of operation on the grid:
- Row-reverse: Reverse the order of the squares in a selected row.
- Column-reverse: Reverse the order of the squares in a selected column.
For example, reversing the 2-nd row followed by reversing the 4-th column will result as follows:
By performing these operations any number of times in any order, how many placements of characters on the grid can be obtained?
Constraints
- 1≦H,W≦200
- S_{i,j} is a lowercase English letter (
a
-z
).
Input
The input is given from Standard Input in the following format:
H W S_{1,1}S_{1,2}...S_{1,W} S_{2,1}S_{2,2}...S_{2,W} : S_{H,1}S_{H,2}...S_{H,W}
Output
Print the number of placements of characters on the grid that can be obtained, modulo 1000000007 (=10^9+7).
Examples
Input
2 2 cf cf
Output
6
Input
1 12 codefestival
Output
2
inputFormat
Input
The input is given from Standard Input in the following format:
H W S_{1,1}S_{1,2}...S_{1,W} S_{2,1}S_{2,2}...S_{2,W} : S_{H,1}S_{H,2}...S_{H,W}
outputFormat
Output
Print the number of placements of characters on the grid that can be obtained, modulo 1000000007 (=10^9+7).
Examples
Input
2 2 cf cf
Output
6
Input
1 12 codefestival
Output
2
样例
2 2
cf
cf
6