만드는 중입니다

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

불타는 바라레 마을

면접 대비

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

요약
불이 k초마다 여덟 방향으로 번지는 격자에서 s에서 t까지 불을 피해 가는 최단 시간을 구한다.
난이도

보통10점 중 6점

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

문제

가상의 적이 쳐들어와 바라레 마을에 불이 났다. 이미 여러 곳이 불타고 있고 불은 빠르게 번진다. 전쟁에서 홀로 살아남은 호르주칸은 마을에 단 한 대뿐인 헬리콥터까지 가서 빠져나가려 한다.

마을은 n×mn \times m 격자다. 시각 00에 일부 칸이 불타고 있다. 어떤 칸에 시각 xx에 불이 붙으면, 변이나 꼭짓점을 맞댄 이웃 여덟 칸에는 시각 x+kx + k에 불이 붙는다. 한번 불이 붙은 칸은 계속 불타는 상태로 남는다. 시각 00에 호르주칸은 칸 s에 서 있고, 헬리콥터는 칸 t에 있다. 시각 xx에 호르주칸은 현재 칸에서 상하좌우로 맞닿은 네 칸 중 하나로 옮겨갈 수 있다. 단, 옮겨갈 칸이 시각 x+1x + 1에 불타고 있지 않아야 한다. 이동 한 번에 1초가 걸린다.

불을 피해 s에서 t까지 가는 최단 시간을 구하는 프로그램을 작성하라.

입력

입력은 여러 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에 양의 정수 nn, mm, kk (1≤n,m,k≤1001 \le n, m, k \le 100)가 주어진다. nn과 mm은 격자의 세로와 가로 크기이고, kk는 불이 번지는 주기다. 이어지는 nn개의 줄에는 길이가 mm인 문자열이 하나씩 주어진다. ii번째 줄의 jj번째 문자가 칸 (i,j)(i, j)를 나타낸다. 시각 00에 불타고 있는 칸은 f로 적혀 있고, f가 하나도 없을 수도 있다. 헬리콥터가 있는 칸은 t, 호르주칸이 서 있는 칸은 s로 적혀 있으며 각각 정확히 하나씩 있다. 나머지 칸은 -로 채워져 있다. 입력의 마지막 줄은 0 0 0이고, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 불을 피해 s에서 t까지 가는 데 걸리는 최단 시간을 한 줄에 출력한다. t에 도달할 수 없으면 Impossible을 출력한다.

예제2

  1. 예제 1

    입력
    7 7 2
    f------
    -f---f-
    ----f--
    -------
    ------f
    ---s---
    t----f-
    3 4 1
    t--f
    --s-
    ----
    2 2 1
    st
    f-
    2 2 2
    st
    f-
    0 0 0
    
    예상 출력
    4
    Impossible
    Impossible
    1
    
  2. 예제 2

    입력
    3 3 1
    s--
    ---
    --t
    1 5 1
    s---t
    0 0 0
    
    예상 출력
    4
    4