만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

폴리오미노의 Jinxiety

시간 제한2초메모리 제한512 MB

요약
격자 위의 볼록 폴리오미노가 주어졌을 때, 두 방향만 써서 모든 칸을 잇는 경로가 가질 수 있는 최소 회전 수를 구합니다.
난이도

보통10점 중 7점

유형
기하, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

폴리오미노는 정사각형 격자 위에서 서로 연결된 단위 정사각형들의 집합이다. 아래 그림은 폴리오미노 예시 4개를 보여준다.

폴리오미노 PP는 임의의 수직선 또는 수평선과의 교집합이 선분이면 볼록하다. 그림에서 (a)와 (b)는 볼록하고, (c)와 (d)는 볼록하지 않다.

두 정사각형은 변을 공유하면 인접하다고 한다. 볼록한 폴리오미노에서는 두 방향만 사용해 인접한 정사각형으로 이동하면, 임의의 정사각형에서 다른 임의의 정사각형으로 갈 수 있다. 아래 그림은 폴리오미노 (b)에서 이런 경로의 예를 보여준다.

볼록한 폴리오미노 PP에 대해 jinxiety J(P)J(P)를 정의한다. J(P)J(P)는 두 방향만 사용하고 방향을 최대 kk번 바꾸는 경로로 임의의 정사각형에서 다른 임의의 정사각형으로 갈 수 있게 하는 최소의 kk이다. 예를 들어 폴리오미노 (a)의 J(P)J(P)는 1이고, (b)의 J(P)J(P)는 2이다.

주어진 볼록한 폴리오미노의 jinxiety를 구하시오.

입력

입력에는 여러 테스트 케이스가 들어 있다. 각 테스트 케이스의 첫 줄에는 폴리오미노의 행 수 hh와 열 수 ww가 주어진다(1≤h,w≤20001 \le h, w \le 2000). 이어지는 hh개의 줄에는 각각 ww개의 문자가 주어진다. 빈 칸은 ., 폴리오미노의 칸은 #로 나타낸다. 주어지는 도형은 볼록한 폴리오미노임이 보장된다.

입력의 마지막 줄은 h=w=0h = w = 0이다. 모든 폴리오미노 설명에 나오는 문자의 총 개수는 4⋅1064\cdot10^6 이하이다. 테스트 케이스는 최대 40 00040\,000개이다.

출력

각 테스트 케이스마다 주어진 폴리오미노의 jinxiety를 한 줄에 정수 하나로 출력한다.

예제1

  1. 예제 1

    입력
    4 5
    #####
    #####
    ###..
    ##...
    5 5
    ####.
    .####
    ..###
    ...##
    ...##
    0 0
    
    예상 출력
    1
    2