만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

말 타기

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

요약
8x8 체스판의 나이트 k개를 칸이 겹치지 않게 1500번 이하의 나이트 이동으로 맨 아래 행의 왼쪽 칸부터 채우는 순서를 구합니다.
난이도

보통10점 중 7점

유형
시뮬레이션, BFS, 그리디
정답자
아직 제출이 없습니다

문제

체스가 스포츠라는 사실은 잘 알려져 있다. 하지만 승마를 즐기는 Dima는 체스를 지루하게 여기며 전혀 스포츠라고 생각하지 않는다. 그의 친구 Sasha는 체스가 얼마나 복잡하고 흥미로울 수 있는지 보여 주기로 했다.

Sasha는 8×88 \times 8 체스판에 나이트 kk마리를 놓았다. 나이트들은 산책로에 있고 마구간으로 돌아가려 하지만, 집으로 가는 길을 기억하지 못한다.

다음 조건을 만족하면 나이트들이 마구간에 있는 것이다. 아래쪽 k div 8k \text{ div } 8개 행이 나이트로 가득 차 있고, 그다음 행에는 가장 왼쪽 칸에만 나이트가 있다. k mod 8≠0k \bmod 8 \ne 0이면 그 행에는 나이트 k mod 8k \bmod 8마리가 가장 왼쪽 자리를 차지한다.

k=11k=11일 때 목표 칸을 나타낸 그림이다. 나이트 한 마리당 칸 하나가 목표다.

나이트는 체스 규칙대로 움직인다. 즉 한 방향으로 정확히 두 칸 이동한 뒤 다른 방향으로 정확히 한 칸 이동한다.

나이트의 가능한 이동

나이트는 한 번에 한 마리씩, 어떤 순서로든 움직인다. 같은 순간에 한 칸에는 나이트가 최대 한 마리만 있을 수 있다. Dima는 이 문제를 이틀 동안 붙잡고 있었다. 두 나이트가 같은 칸을 차지하는 일이 없으면서 모든 나이트가 마구간에 도착하도록 이동 순서를 찾아라. 이동 횟수를 최소화할 필요는 없지만, 전체 이동 횟수는 1500번을 넘으면 안 된다.

입력

첫 줄에 정수 kk(판 위의 나이트 수, 1≤k≤641 \leq k \leq 64)가 주어진다. 다음 kk개 줄에는 나이트의 위치가 한 줄에 하나씩 xy 형식으로 주어진다. x는 열을 나타내는 문자이고 y는 행을 나타내는 숫자다. 열은 왼쪽의 a부터 오른쪽의 h까지, 행은 아래의 1부터 위의 8까지 번호가 매겨진다.

출력

첫 줄에 이동 횟수를 출력한다. 이어서 이동을 한 줄에 하나씩 순서대로 xy-zt 형식으로 출력한다. x와 z는 열을 나타내는 문자이고 y와 t는 행을 나타내는 숫자다. 이동 횟수를 최소화할 필요는 없지만 전체 횟수는 1500번을 넘으면 안 된다.

예제2

  1. 예제 1

    입력
    2
    a5
    f1
    
    예상 출력
    4
    a5-b3
    b3-a1
    f1-d2
    d2-b1
    
  2. 예제 2

    입력
    3
    a1
    b3
    c2
    
    예상 출력
    5
    b3-d2
    d2-b1
    c2-b4
    b4-d3
    d3-c1