영상 감시 제어
시간 제한2초메모리 제한512 MB
1과 2로 채워진 n행 m열 격자에서 각 행과 열을 순환 이동할 수 있을 때, 네 칸이 모두 같은 2x2 블록의 수를 최대로 만든다.
문제
경비 업체가 두 건물의 경비를 맡게 되었다. 각 건물에는 여러 대의 감시 카메라가 설치되어 있다.
경비실의 벽 한 면은 개의 가로 줄로 이루어져 있고, 각 줄에는 개의 모니터가 있다. 각 모니터에는 두 건물 중 하나에 있는 카메라의 영상이 표시된다. 경비실에는 <<왼쪽>>, <<오른쪽>>, <<위>>, <<아래>> 네 개의 버튼이 달린 혁신적인 제어판이 있다.
<<왼쪽>> 버튼은 각 모니터의 영상을 왼쪽 모니터로 옮긴다. 각 줄의 가장 왼쪽 모니터에 있던 영상은 그 줄의 가장 오른쪽 모니터로 옮겨진다.
<<오른쪽>>, <<위>>, <<아래>> 버튼도 같은 방식으로 동작한다. <<오른쪽>> 버튼은 각 모니터의 영상을 오른쪽 모니터로 옮긴다. 각 줄의 가장 오른쪽 모니터에 있던 영상은 그 줄의 가장 왼쪽 모니터로 옮겨진다. <<위>> 버튼은 각 모니터의 영상을 위쪽 모니터로 옮긴다. 가장 위쪽 줄에 있던 영상은 가장 아래쪽 줄의 모니터로 옮겨진다. <<아래>> 버튼은 각 모니터의 영상을 아래쪽 모니터로 옮긴다. 가장 아래쪽 줄에 있던 영상은 가장 위쪽 줄의 모니터로 옮겨진다.
크기가 인 모니터 블록이 모두 같은 건물의 영상을 표시하면 그 블록을 관찰하기 편한 블록이라고 하자. 제어판의 명령으로 영상을 옮기면 관찰하기 편한 블록의 수가 달라질 수 있다. 한 모니터가 여러 관찰하기 편한 블록에 들어갈 수 있다.
제어판으로 모니터를 조작하여 얻을 수 있는 관찰하기 편한 블록의 최대 개수를 구하는 프로그램을 작성해야 한다.
입력
첫째 줄에는 줄의 수 과 각 줄의 모니터 수 이 정수로 주어진다. 다음 개 줄에는 위에서 아래 순서대로 모니터의 각 줄이 주어진다. 각 줄은 개의 문자로 이루어져 있으며, 왼쪽에서 오른쪽 순서대로 모니터를 나타낸다. 문자 <<1>>은 그 모니터에 첫 번째 건물의 영상이 표시됨을, 문자 <<2>>는 두 번째 건물의 영상이 표시됨을 뜻한다.
출력
모니터의 영상을 옮겨 얻을 수 있는 관찰하기 편한 블록의 최대 개수를 정수 하나로 출력한다.
힌트
첫 번째 예제에서는 <<오른쪽>> 명령으로 왼쪽에 1로 이루어진 관찰하기 편한 블록을, 오른쪽에 2로 이루어진 관찰하기 편한 블록을 얻을 수 있다.
두 번째 예제에서는 처음부터 모니터에 관찰하기 편한 블록이 두 개 있다.
세 번째 예제에서는 예를 들어 <<오른쪽>>과 <<아래>> 명령으로 1로 이루어진 관찰하기 편한 블록 세 개를 얻을 수 있다.