레밍, 사방이 레밍. 하지만 오래가진 않는다.

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

요약
모든 칸에 레밍이 하나씩 있고 각 레밍이 네 방향을 순환하는 의제를 가질 때, 레밍들이 동시에 규칙에 따라 움직여 전부 보드 밖으로 나갈 때까지 걸리는 시간을 구한다.
난이도

보통10점 중 5점

유형
시뮬레이션, 구현, 행렬
정답자
아직 제출이 없습니다

문제

n×mn \times m 판의 모든 칸에 레밍이 한 마리씩 있다. 매초 모든 레밍은 아래 규칙에 따라 동서남북 중 한 칸으로 움직이려고 한다. 각 레밍은 네 방향의 순열인 의제(agenda) 를 하나씩 가진다(예: NWES).

  1. 각 레밍의 현재 방향 DD는 의제의 첫 방향으로 시작한다.
  2. 매 시간 단계마다 각 레밍은 방향 DD로 한 칸 움직이려고 한다. 레밍 LL에 대해:
    1. DD가 LL을 판 밖으로 내보내면 LL은 판을 떠난다(레밍이 하나 줄어든다). 그렇지 않으면 LL의 목표는 다른 칸이다.
    2. LL의 목표 칸이 비어 있거나, 그 칸의 레밍이 떠나 곧 비게 되고, 또한 다른 어떤 레밍도 그 칸으로 움직이려 하지 않으면 LL은 그 칸으로 이동한다. 이때 LL은 다음 단계에서도 같은 방향 DD를 유지한다.
    3. 그 밖의 경우(다른 레밍도 LL의 목표 칸으로 움직이려 하거나, 그 칸에 움직일 수 없는 레밍이 있는 경우) LL은 제자리에 머무르고 DD를 의제의 다음 방향으로 바꾼다(필요하면 처음으로 돌아간다).

서로 칸을 맞바꾸려는 두 레밍은 자리를 바꿀 수 있다. 단, 다른 레밍이 그 두 칸 중 하나로 움직이려 하면 세 마리 모두 제자리에 머무른다. 레밍들은 모두 판을 떠날 때까지 계속 움직인다. 그렇게 되기까지 몇 단계가 걸리는지 구하여라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 행과 열의 개수를 나타내는 두 양의 정수 nn과 mm이 적힌 줄로 시작하며, 각 값은 최대 100100이다. 판은 칸 (0,0)(0, 0)이 남서쪽 모서리, 칸 (0,m−1)(0, m - 1)이 남동쪽 모서리가 되도록 놓인다. 이어서 nmnm마리 레밍의 의제가 주어지며, 각 의제는 문자열 NESW의 순열이고 한 칸 띄어 구분된다. 한 줄에 의제가 1616개씩 있다(마지막 줄은 그렇지 않을 수 있다). 의제는 행 순서대로 레밍에 배정된다. 즉 첫 번째 의제는 (0,0)(0, 0)의 레밍에, 두 번째는 (0,1)(0, 1)의 레밍에, 이런 식이다. 마지막 테스트 케이스 다음에 0 0 줄이 오며 입력을 끝낸다.

출력

각 테스트 케이스에 대해, 케이스 번호와 마지막 레밍(들)이 판에서 떨어질 때까지 걸린 단계 수를 다음 형식으로 한 줄에 출력한다.

Case k: steps

한 줄의 항목들은 오직 하나의 공백으로만 구분한다.

예제1

  1. 예제 1

    입력
    2 2
    ENWS WSNE NESW WENS
    2 2
    ENWS WSNE NESW SWEN
    0 0
    
    예상 출력
    Case 1: 2
    Case 2: 3