Symmetry

시간 제한2초메모리 제한1024 MB

문제

$N \times M$ 크기의 격자 $A$가 주어진다. 격자의 $i$행 $j$열에 해당하는 칸에는 알파벳 대문자 $A_{i, j}$가 쓰여 있다.

다음 조건을 만족하는 격자를 대칭 격자라고 한다.

  • $1$개 이상의 행과 $2$개 이상의 짝수 개 열을 포함하고 있다.
  • 격자의 정 가운데 세로축을 기준으로 격자를 접었을 때 맞닿아 있는 문자가 모두 동일하다.
    • 구체적으로, 어떤 격자 $B$의 크기가 $r \times 2c$라 했을 때, $1 \le i \le r$; $1 \le j \le c$를 만족하는 모든 $(i, j)$에 대해 $B_{i, j} = B_{i, 2c + 1 - j}$이다.

주어진 격자 $A$에서 연속한 몇 개의 행과 연속한 몇 개의 열을 골라서 만들 수 있는 모든 부분 격자 중, 대칭 격자인 것의 개수를 출력하라.

입력

첫째 줄에 격자 $A$의 행 개수 $N$과 열 개수 $M$이 공백으로 구분되어 주어진다. $(2 \le N, M \le 500)$

다음 $N$개의 줄에는 $A_{i,1}, A_{i, 2}, \cdots, A_{i, M}$이 공백 없이 주어진다. $A_{i, j}$는 격자 $A$의 $i$행 $j$열에 쓰여진 문자를 의미하며, 알파벳 대문자 중 하나이다.

출력

주어진 격자 $A$의 연속한 모든 부분 격자 중, 대칭 격자인 것의 개수를 출력한다.

힌트

이 문제는 Python3를 이용하여 풀 수 있음을 보장할 수 없다. Python을 사용한다면, PyPy3가 Python3와 같은 문법을 가지면서 일반적으로 더 빠르게 동작하기에 PyPy3로 제출하는 것을 권장한다.