1960년대의 한 프로그래머는 키보드 대신 천공 카드로 프로그램을 컴퓨터에 입력한다. 크기가 n×m 인 카드는 m 개의 열과 n 개의 행으로 배열된 n⋅m 개의 동일한 직사각형 칸으로 이루어진다. 각 칸에는 구멍을 뚫을 수 있으며, 구멍의 배치가 프로그램의 내용을 나타낸다.

프로그래머는 어떤 칸에 구멍을 뚫어야 하는지 이미 정확히 알고 있다. 카드를 효율적으로 만들기 위해 직사각형 도장(매트릭스) 하나를 제작한다. 이 도장을 카드에 찍으면 선택한 a×b 블록(연속한 a 개의 행과 연속한 b 개의 열이 만나는 부분)에 속한 모든 칸에 구멍이 뚫린다. 도장은 카드 안에 완전히 들어가는 위치라면 어디에서든 원하는 만큼 여러 번 찍을 수 있지만, 뚫으면 안 되는 칸을 절대 뚫어서는 안 된다. 오직 이 도장 하나만 사용해서 완성한 카드에는 계획한 위치에만 정확히 구멍이 있어야 한다.
칸이 정사각형이 아니므로 도장을 회전할 수 없다. 즉 a×b 도장을 b×a 로 돌려 쓸 수 없다. 카드를 만들 수 있는 모든 도장 중에서 프로그래머는 가능한 한 큰 도장을 원한다. 사용할 수 있는 가장 큰 도장의 크기를 구하라.
첫째 줄에 카드의 행 수와 열 수를 나타내는 두 정수 n 과 m 이 주어진다 (1≤n,m≤2500). 다음 n 개의 줄에는 각각 한 행을 나타내는 m 개의 문자가 주어진다. 문자 X 는 구멍을 뚫어야 하는 칸을, _ 는 뚫지 않아야 하는 칸을 뜻한다. 카드에는 X 로 표시된 칸이 적어도 하나 있다.
도장의 크기를 나타내는 두 정수 a 와 b 를 이 순서(행의 수, 그다음 열의 수)로 출력한다. 이 도장으로 입력에 주어진 카드를 만들 수 있어야 하며, 곱 a⋅b 가 가능한 한 커야 한다. 최대 곱을 이루는 도장이 여럿이면 a 가 가장 작은 것을 출력한다.