두 나이트
시간 제한2초메모리 제한1024 MB
체스판에 놓인 두 나이트를 서로 같은 칸에 서지 않도록 번갈아 움직여 각자의 목표 칸으로 옮기고, 최소 이동 횟수와 실제 이동 순서를 출력하거나 불가능하면 -1을 출력한다.
문제
페티야는 체스를 배우고 있다. 나이트는 기물을 뛰어넘을 수 있지만, 서로가 원하는 칸에 도착하는 것을 방해할 수 있다는 사실을 최근에 알게 되었다. 페티야는 체스판 위에 검은 나이트와 흰 나이트를 하나씩 놓고, 각 나이트마다 도착시키고 싶은 칸을 하나씩 정했다. 이제 그는 두 나이트가 원하는 칸에 도착하는 데 필요한 최소 이동 횟수를 알고 싶어 한다.
나이트는 체스 규칙에 따라 움직인다(가로로 한 칸, 세로로 두 칸 또는 세로로 한 칸, 가로로 두 칸). 검은 나이트와 흰 나이트의 이동 순서는 임의로 정할 수 있다. 두 나이트가 동시에 같은 칸에 서 있는 것은 허용되지 않는다.
입력
입력 파일에는 체스판의 네 칸이 다음 순서로 주어진다: 흰 나이트의 시작 위치, 검은 나이트의 시작 위치, 흰 나이트의 도착 위치, 검은 나이트의 도착 위치. 체스판의 칸은 가로(문자 a부터 h)와 세로(숫자 1부터 8)를 공백 없이 이어서 나타낸다. 각 칸의 설명은 공백 하나로 구분한다.
처음에 두 나이트는 서로 다른 칸에 있고, 마지막에도 두 나이트는 서로 다른 칸에 있어야 한다.
출력
출력 파일의 첫째 줄에 필요한 이동 횟수를 출력한다. 이어서 이동 순서를 출력한다. 이동은 다음과 같이 나타낸다: 나이트의 색에 해당하는 문자(W는 흰색, B는 검은색)와 이동할 칸. 칸은 입력 파일과 같은 형식으로 출력한다.
원하는 이동 순서가 존재하지 않으면 출력 파일의 첫째 줄에 을 출력한다.