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

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

스탬피드!

시간 제한5초메모리 제한128 MB

요약
장애물이 있는 격자판에서 n개 말을 왼쪽 열에서 오른쪽 열로 충돌 없이 가장 적은 턴에 이동합니다.
난이도

어려움10점 중 8점

유형
그래프, 이분 탐색
정답자
아직 제출이 없습니다

문제

n×nn \times n 크기의 게임판이 있다. 일부 칸에는 장애물이 있지만, 맨 왼쪽 열과 맨 오른쪽 열에는 장애물이 없다. 맨 왼쪽 열에는 내 말 nn개가 한 행에 하나씩 놓여 있다. 목표는 말을 모두 맨 오른쪽 열로 최대한 빨리 옮기는 것이다.

한 턴에 각 말을 위, 아래, 왼쪽, 오른쪽 중 한 방향으로 한 칸 움직이거나 그 자리에 그대로 둘 수 있다. 장애물이 있는 칸으로는 움직일 수 없고, 같은 턴에 두 말이 같은 칸으로 움직일 수도 없다. 모든 말이 동시에 움직이므로, 어떤 칸에 있던 말이 같은 턴에 그 칸을 떠난다면 다른 말이 그 칸으로 들어갈 수 있다.

nn과 장애물 배치가 주어질 때, 말을 모두 판의 맨 오른쪽 열로 옮기는 데 필요한 최소 턴 수를 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 게임판의 크기를 나타내는 양의 정수 nn이 주어진다 (n≤25n \le 25). 이어지는 nn개의 줄에는 각각 문자 nn개가 주어진다. ii번째 줄의 jj번째 문자가 X이면 (i,j)(i, j) 칸에 장애물이 있고, .이면 장애물이 없다. 행 번호와 열 번호는 0부터 센다.

0번 열과 n−1n-1번 열에는 장애물이 절대 없고, 두 열을 잇는 장애물 없는 경로가 항상 하나 이상 있다.

0 하나만 있는 줄이 입력의 끝을 뜻한다.

출력

각 테스트 케이스마다 Case i: t 형식으로 한 줄씩 출력한다. i는 1부터 시작하는 테스트 케이스 번호이고, t는 말을 모두 맨 왼쪽 열에서 맨 오른쪽 열로 옮기는 데 필요한 최소 턴 수이다.

예제2

  1. 예제 1

    입력
    5
    .....
    .X...
    ...X.
    ..X..
    .....
    5
    .X...
    .X...
    .X...
    .XXX.
    .....
    0
    
    예상 출력
    Case 1: 6
    Case 2: 8
    
  2. 예제 2

    입력
    3
    .X.
    .X.
    ...
    4
    ....
    .XX.
    .XX.
    ....
    0
    
    예상 출력
    Case 1: 4
    Case 2: 4