题目描述
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:
<image>
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
输入格式
见题面
输出格式
见题面