你有一张大小为 $N \times M$ 的矩阵形状的纸。每个单元格都被涂上了 26 种可能的颜色之一,这些颜色由小写英文字母表示。这张纸可以通过以下方式折叠:首先,你在两列之间选择一条垂直线,或者在两行之间选择一条水平线。这条线将纸分成两部分。然后,你以这条线为折叠轴,将较小的一侧折叠到较大的一侧上。但是,只有当较小一侧的所有单元格与另一侧的对应单元格颜色匹配时(换句话说,每个单元格的颜色必须与其关于所选轴的反射位置的颜色相同),你才能进行此操作。如果两侧大小相等,你可以从任意一侧折叠。
你注意到,经过任意次数的折叠操作后,你最终会得到原始纸张的一个连续子矩阵。通过进行任意多次(可能为零次)折叠操作,你可以得到多少种不同的原始纸张子矩阵?如果两个子矩阵在初始矩阵中占据不同的坐标,即使它们具有相同的颜色内容,也被视为不同的子矩阵。
输入格式
第一行包含两个整数 $N$ 和 $M$ ($N, M \ge 1, 1 \le N \cdot M \le 1\,000\,000$)。
接下来的 $N$ 行,每行包含一个长度为 $M$ 的字符串,由小写英文字母组成。这些行共同描述了给定的纸张。
输出格式
输出一行,包含一个整数:通过折叠纸张可以得到的不同子矩阵的数量。
样例
样例输入 1
5 7 baabbaa cbbccbb ababbab cabccba bccaacc
样例输出 1
2