천공 카드

아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

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

A 4 by 5 punch card; punched fields are drawn as black rectangles.

프로그래머는 어떤 칸에 구멍을 뚫어야 하는지 이미 정확히 알고 있다. 카드를 효율적으로 만들기 위해 직사각형 도장(매트릭스) 하나를 제작한다. 이 도장을 카드에 찍으면 선택한 a×ba \times b 블록(연속한 aa 개의 행과 연속한 bb 개의 열이 만나는 부분)에 속한 모든 칸에 구멍이 뚫린다. 도장은 카드 안에 완전히 들어가는 위치라면 어디에서든 원하는 만큼 여러 번 찍을 수 있지만, 뚫으면 안 되는 칸을 절대 뚫어서는 안 된다. 오직 이 도장 하나만 사용해서 완성한 카드에는 계획한 위치에만 정확히 구멍이 있어야 한다.

칸이 정사각형이 아니므로 도장을 회전할 수 없다. 즉 a×ba \times b 도장을 b×ab \times a 로 돌려 쓸 수 없다. 카드를 만들 수 있는 모든 도장 중에서 프로그래머는 가능한 한 큰 도장을 원한다. 사용할 수 있는 가장 큰 도장의 크기를 구하라.

입력

첫째 줄에 카드의 행 수와 열 수를 나타내는 두 정수 nnmm 이 주어진다 (1n,m25001 \le n, m \le 2500). 다음 nn 개의 줄에는 각각 한 행을 나타내는 mm 개의 문자가 주어진다. 문자 X 는 구멍을 뚫어야 하는 칸을, _ 는 뚫지 않아야 하는 칸을 뜻한다. 카드에는 X 로 표시된 칸이 적어도 하나 있다.

출력

도장의 크기를 나타내는 두 정수 aabb 를 이 순서(행의 수, 그다음 열의 수)로 출력한다. 이 도장으로 입력에 주어진 카드를 만들 수 있어야 하며, 곱 aba \cdot b 가 가능한 한 커야 한다. 최대 곱을 이루는 도장이 여럿이면 aa 가 가장 작은 것을 출력한다.