나이트의 추격
시간 제한1초메모리 제한128 MB
판 크기와 폰, 나이트의 시작 위치가 주어질 때 나이트가 승리할 수 있는지, 무승부를 강제할 수 있는지, 패배하는지를 판정하고 최소 나이트 이동 수를 구한다.
문제
체스에서 각 기물은 종류에 따라 정해진 방식으로 판 위를 움직인다. 게임의 목표는 상대 기물이 있는 칸으로 이동해 그 기물을 잡고, 최종적으로 킹을 몰아넣는 것이다.
이 변형 게임에서는 크기가 다양한 판 위에 단 개의 기물만 놓는다.
- 흰색 폰: 매 이동마다 판의 맨 윗줄을 향해 위쪽으로 곧장 한 칸씩 전진한다.
- 검은색 나이트: 현재 칸에서 최대 여덟 방향으로 움직일 수 있다. 위나 아래로 두 칸 그리고 왼쪽이나 오른쪽으로 한 칸, 또는 위나 아래로 한 칸 그리고 왼쪽이나 오른쪽으로 두 칸이다. 나이트는 항상 판 위에 있어야 하며, 판 밖으로 나가는 이동은 허용되지 않는다.
아래 그림에서 나이트의 위치는 로, 나이트가 이동할 수 있는 칸은 부터 까지로 표시했다.
. . . . . . .
. . 8 . 1 . .
. 7 . . . 2 .
. . . K . . .
. 6 . . . 3 .
. . 5 . 4 . .
. . . . . . .
폰이 먼저 움직이고, 그다음부터 나이트와 폰이 번갈아 움직인다. 나이트는 자기 차례마다 폰이 있는 칸으로 이동하면 승리(Win), 폰 바로 위 칸으로 이동하면 무승부(Stalemate)가 된다. 폰이 판의 맨 윗줄에 도달하면 게임은 즉시 끝나고 나이트는 패배(Loss)한다.
각 게임에 대해, 나이트가 이길 수 있는지와 이길 수 있다면 필요한 최소 이동 횟수를 구하라. 이길 수 없다면 무승부를 만들 수 있는지와, 만들 수 있다면 필요한 최소 이동 횟수를 구하라. 승리도 무승부도 만들 수 없다면, 폰이 이기기 전까지 나이트가 움직이는 횟수를 구하라.
입력
첫째 줄에 분석할 게임의 수를 나타내는 양의 정수 이 주어진다.
각 게임은 여섯 줄로 주어진다.
- — 판의 행 수
- — 판의 열 수
- — 폰의 시작 행
- — 폰의 시작 열
- — 나이트의 시작 행
- — 나이트의 시작 열
행 은 판의 맨 아랫줄, 행 은 맨 윗줄이다. 열 은 가장 왼쪽, 열 는 가장 오른쪽이다. 폰과 나이트의 시작 위치는 항상 서로 다르다.
출력
각 게임마다 정확히 한 줄을 출력한다.
- 나이트가 이길 수 있으면
Win in K knight move(s).을 출력한다. 여기서 는 최소 이동 횟수이다. - 이길 수는 없지만 무승부를 만들 수 있으면
Stalemate in K knight move(s).을 출력한다. 여기서 는 최소 이동 횟수이다. - 둘 다 불가능하면
Loss in K knight move(s).을 출력한다. 여기서 는 폰이 맨 윗줄에 도달하기 전까지 나이트가 움직이는 횟수이다.