로봇 내비게이션

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

요약
로봇을 시작 위치에서 목적지까지 이동시키는 가장 짧은 명령 프로그램의 길이를 구하고, 서로 다른 최단 프로그램의 수를 m으로 나눈 나머지를 구합니다.
난이도

보통10점 중 4점

유형
BFS, 그래프, 동적 계획법
정답자
아직 제출이 없습니다

문제

어떤 로봇이 멀리 떨어진 행성을 탐사하기 위해 파견되었다. 로봇이 따라갈 경로는 매일 하나의 프로그램으로 전송되며, 프로그램은 다음 세 가지 명령을 나열한 것이다.

  • FORWARD: 바라보는 방향으로 한 칸 전진한다.
  • TURN LEFT: 제자리에서 왼쪽으로 9090도 회전한다. 위치는 바뀌지 않는다.
  • TURN RIGHT: 제자리에서 오른쪽으로 9090도 회전한다. 위치는 바뀌지 않는다.

로봇에는 주변 지형의 지도를 얻을 수 있는 센서가 있다. 지도는 MM행 NN열의 격자로 주어지며, 각 칸은 좌표 (r,c)(r, c)로 나타낸다. r=0r = 0이 지도의 북쪽 끝, r=M−1r = M-1이 남쪽 끝, c=0c = 0이 서쪽 끝, c=N−1c = N-1이 동쪽 끝이다. 일부 칸에는 분화구 같은 위험 지형이 있으며, 로봇을 잃지 않으려면 프로그램이 그런 칸을 반드시 피해야 한다.

로봇의 처음 위치와 방향, 그리고 목적지가 주어졌을 때, 로봇을 목적지로 옮기는 가장 짧은(명령 수가 가장 적은) 프로그램을 보내고자 한다. 목적지에서 로봇이 어느 방향을 바라보는지는 상관없다. 그러나 행성 간 통신이 항상 안정적이지는 않으므로 서로 다른 프로그램을 여러 개 보내야 할 수도 있어, 로봇을 목적지로 옮기는 서로 다른 가장 짧은 프로그램이 몇 개인지를 알고 싶다. 이 개수는 매우 커질 수 있으므로, 주어진 법 mm으로 나눈 나머지로 답을 구한다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 케이스의 첫 줄에는 세 정수 MM, NN, 그리고 법 mm이 주어진다 (0<M,N≤10000 < M, N \le 1000, 0<m≤10000000000 < m \le 1000000000). 이어지는 MM개의 줄에는 각각 NN개의 문자가 있어 지도를 나타낸다. .은 로봇이 들어갈 수 있는 칸, *는 위험 지형을 뜻한다. 그다음 줄에는 네 정수 r1r_1, c1c_1, r2r_2, c2c_2와 문자 dd가 주어진다. (r1,c1)(r_1, c_1)은 로봇의 처음 위치, (r2,c2)(r_2, c_2)는 목적지이며, 문자 dd는 N, S, W, E 중 하나로 로봇이 처음 바라보는 방향(각각 북, 남, 서, 동)을 나타낸다. 처음 위치와 목적지는 위험 지형이 아니다. m=0m = 0인 줄이 나오면 입력이 끝난다.

출력

각 케이스마다 한 줄에 Case i: m r 형식으로 출력한다. ii는 케이스 번호(11부터 시작), mm은 그 케이스의 법, rr는 로봇을 목적지로 옮기는 서로 다른 가장 짧은 프로그램의 개수를 mm으로 나눈 나머지이다. 로봇을 목적지로 옮길 수 있는 프로그램이 하나도 없으면 개수 대신 -1을 출력한다.

예제1

  1. 예제 1

    입력
    3 3 100
    ***
    .*.
    ***
    1 0 1 2 E
    4 4 100
    ****
    *.*.
    *.*.
    *...
    1 1 1 3 N
    4 8 100
    ********
    ...**...
    *......*
    ********
    1 0 1 7 E
    0 0 0
    
    예상 출력
    Case 1: 100 -1
    Case 2: 100 2
    Case 3: 100 4