아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

천공 카드

시간 제한1초메모리 제한256 MB

요약
펀치 카드에서 표시된 칸만 정확히 뚫고 빈 칸은 건드리지 않는 직사각형 스탬프 중 면적이 가장 큰 크기를 구합니다.
난이도

어려움10점 중 8점

유형
누적 합, 행렬, 슬라이딩 윈도우, 완전 탐색
정답자
아직 제출이 없습니다

문제

1960년대의 한 프로그래머는 키보드 대신 천공 카드로 프로그램을 컴퓨터에 입력한다. 크기가 n×mn \times m 인 카드는 mm 개의 열과 nn 개의 행으로 배열된 n⋅mn \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 로 돌려 쓸 수 없다. 카드를 만들 수 있는 모든 도장 중에서 프로그래머는 가능한 한 큰 도장을 원한다. 사용할 수 있는 가장 큰 도장의 크기를 구하라.

입력

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

출력

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

예제3

  1. 예제 1

    입력
    4 5
    _XXX_
    XXXX_
    XXXXX
    _XXXX
    
    예상 출력
    2 3
    
  2. 예제 2

    입력
    1 1
    X
    
    예상 출력
    1 1
    
  3. 예제 3

    입력
    3 4
    XXXX
    XXXX
    XXXX
    
    예상 출력
    3 4