보드 게임 엔진의 일부를 작성합니다. 판의 배치와 한 명의 플레이어가 주어질 때, 그 플레이어가 둘 수 있는 모든 합법적인 이동을 나열해야 합니다.
게임은 모두 같은 색인 $8 \times 8$ 칸의 격자판에서 진행됩니다. 행은 위에서 아래로 A부터 H까지, 열은 왼쪽에서 오른쪽으로 1부터 8까지 이름이 붙습니다. 따라서 각 칸은 행 문자 뒤에 열 숫자를 붙여 나타냅니다(예를 들어 A1은 가장 왼쪽 위 칸, H8은 가장 오른쪽 아래 칸입니다).
두 플레이어가 있으며, 각자의 말은 X와 O(숫자 0이 아니라 알파벳 "오")로 표기합니다. 어느 시점에나 각 플레이어는 판 위에 1개 이상 12개 이하의 말을 가집니다. 이동은 다음 규칙을 따릅니다.
입력은 하나 이상의 판 배치로 이루어집니다. 각 배치는 8개의 문자로 이루어진 8줄로 주어지며, 각 문자는 X, O, 또는 .(마침표)입니다. X와 O는 말이 놓인 칸을, .은 빈 칸을 나타냅니다. 각 판 바로 다음 줄에는 X 또는 O 문자 하나가 있으며, 이는 이동을 나열할 플레이어를 가리킵니다. 입력은 파일의 끝에서 종료됩니다.
각 판에 대해, 지정된 플레이어의 모든 합법적인 이동을 한 줄에 하나씩 출력합니다. 각 줄은 출발 칸과 도착 칸을 그 순서대로 하이픈 - 하나로 이어서 나타냅니다(예: A1-B2). 각 칸은 행 문자 뒤에 열 숫자를 붙여 적습니다. 해당 판에서 그 플레이어가 둘 수 있는 이동이 없으면 대신 No moves are possible을 출력합니다. 연속한 판의 출력 사이는 빈 줄 하나로 구분합니다.
출력이 유일하게 정해지도록, 다음 순서를 정확히 지켜 이동을 나열합니다. 판의 칸을 위에서 아래로, 각 행 안에서는 왼쪽에서 오른쪽으로 훑습니다. 지정된 플레이어의 각 말에 대해, 여덟 방향을 시계 방향 순서로 — 위, 오른쪽 위, 오른쪽, 오른쪽 아래, 아래, 왼쪽 아래, 왼쪽, 왼쪽 위 — 검사하여, 합법적인 이동을 발견한 순서대로 출력합니다.