격자판 회전 서브태스크 2초 2048MB
문제
격자판에 1 또는 2가 쓰여있습니다.
우리는 격자판을 상하좌우로 몇 번이고 회전시킬 수 있습니다.
격자판을 이동시킬 때 특정행 또는 특정열만 회전할 수는 없고 전체행 또는 열이 동시에 회전해야 합니다.
예를 들어 격자판을 위로 한 칸 회전할 시, 모든 열의 맨 위 칸은 맨 아래 칸으로 이동하게 됩니다.
다른 방향도 마찬가지입니다.
인접한 2 x 2 칸에 동일한 수가 쓰여있으면 우리는 이것을 '편리하다'라고 할 것 입니다.
상하좌우로 회전시킨 결과, '편리한' 위치의 개수가 변경될 수 있습니다.
격자판을 회전시켜서 얻을 수 있는 '편리한' 위치의 개수의 최댓값을 구하세요.
입력
첫 번쨰 줄에는 격자판의 행과 열의 수를 나타내는 n과 m이 공백으로 구분되어 주어집니다.
다음의 n개의 줄에는 위에서 격자판의 모양이 주어집니다.
격자판은 1 또는 2로만 이루어져 있습니다.
부분문제
#1(37점) : 2 <= n, m <= 50
#2(28점) : 2 <= n, m <= 300
#3(35점) : 2 <= n, m <= 1000
출력
첫 번쨰 줄에 격자판을 회전시켜서 얻을 수 있는 '편리한' 위치의 개수의 최댓값을 출력하세요.
예제 #1
2 4
1221
1221
2
예제 #2
3 2
22
22
22
2
예제 #3
3 3
111
121
111
3