아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

나이트의 여행

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

요약
넓이가 26 이하인 직사각형 체스판에서 모든 칸을 정확히 한 번씩 방문하는 사전순으로 가장 앞선 나이트 투어를 찾는다.
난이도

보통10점 중 6점

유형
백트래킹, DFS, 완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

나이트는 매번 똑같은 흑백 칸만 보는 것이 지겨워져서 세계 일주를 떠나기로 했다. 나이트는 한 번 움직일 때 한 방향으로 두 칸, 그리고 그 방향에 수직으로 한 칸 이동한다.

나이트의 세계는 그가 살고 있는 체스판이다. 이 나이트가 사는 체스판은 일반적인 8×88 \times 8 판보다 작지만 여전히 직사각형 모양이다. 모험심 넘치는 이 나이트가 여행 계획을 세울 수 있도록 도와주겠는가?

나이트가 움직일 수 있는 여덟 가지 방법.

나이트가 모든 칸을 정확히 한 번씩 방문하는 경로를 찾아라. 나이트는 체스판의 어느 칸에서든 출발할 수 있고, 어느 칸에서든 끝낼 수 있다.

입력

첫째 줄에 양의 정수 nn이 주어진다. 이어지는 줄에는 nn개의 테스트 케이스가 주어진다.

각 테스트 케이스는 두 양의 정수 pp와 qq가 적힌 한 줄로 이루어지며, 1≤p⋅q≤261 \le p \cdot q \le 26을 만족한다. 이는 p×qp \times q 크기의 체스판을 나타낸다. 여기서 pp는 서로 다른 칸 숫자 1,…,p1, \dots, p의 개수를, qq는 서로 다른 칸 문자의 개수를 나타낸다. 칸 문자는 라틴 문자의 처음 qq개, 즉 A,…A, \dots 이다.

출력

각 시나리오의 출력은 "Scenario #i:" 형식의 줄로 시작한다. 여기서 ii는 1부터 시작하는 시나리오 번호이다. 그다음, 나이트의 이동으로 체스판의 모든 칸을 방문하는 경로 중 사전순으로 가장 앞서는 경로를 한 줄에 출력하고, 그 뒤에 빈 줄 하나를 출력한다. 경로는 방문한 칸의 이름을 순서대로 이어 붙여 한 줄로 나타낸다. 각 칸의 이름은 대문자 하나와 그 뒤에 오는 숫자 하나로 이루어진다.

그러한 경로가 존재하지 않으면 impossible을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    3
    1 1
    2 3
    4 3
    
    예상 출력
    Scenario #1:
    A1
    
    Scenario #2:
    impossible
    
    Scenario #3:
    A1B3C1A2B4C2A3B1C3A4B2C4