Bob와 Alice는 그래프에서 최단 경로를 찾는 게임을 즐겨한다.
동생 Bob은 아직 어려서 실수를 많이 하기 때문에 Alice는 Bob가 연습할 수 있도록 다음과 같은 문제를 제시했다.
먼저, 길이를 나타내는 정수 L을 정한 후, 0부터 10L−1 까지의 총 10L개의 양의 정수를 이용하여 아래 규칙에 따라 그래프를 만든다:
- 노드: 0부터 10L−1 까지의 각 정수는 그래프의 고유한 노드를 나타낸다. 이 때, 각 정수는 선행하는 0을 붙여 반드시 길이가 L이 되도록 만든다. 예를 들어 L=2라면 00,01,02,…,98,99로 총 100개의 노드를 만들게 된다.
- 간선: 두 정점 (x,y) 사이에 간선이 있으려면 x와 y의 1의 자리, 10의 자리, ..., 10L−1의 자리를 비교했을 때 딱 한 곳만 달라야 하고 그 차이가 정확히 1이 되어야 한다. 예를 들어 L=2인 경우, 00과 01, 01과 11, 27과 37, 36과 46 사이에는 간선이 있고, 00과 02, 01과 10, 36과 47 혹은 46과 57사이에는 간선이 없다.
아래 그림은 L=2 인 경우 그래프의 일부를 보여준다.

위 규칙에 따라 그래프를 만든 뒤, Alice는 Bob에게 두 정점 x와 y사이의 최단 경로 중 사전 순으로 정렬했을 시 K번째에 해당하는 최단 경로를 찾아보라고 했다. 예를 들어 L=2, x=37, y=55인 경우를 생각해보자. 이 경우 두 노드 사이의 최단 거리는 4이며, 아래와 같이 총 여섯 개의 최단 경로가 존재한다. 만약 K=3이라면 정답은 3번째 최단 경로인 37−36−46−56−55가 된다.
- 37−36−35−45−55
- 37−36−46−45−55 위의 경로와 비교하면 3번째 노드인 35가 46보다 사전 순으로 앞선다.
- 37−36−46−56−55 위의 경로와 비교하면 4번째 노드인 45가 56보다 사전 순으로 앞선다.
- 37−47−46−45−55 위의 경로와 비교하면 2번째 노드인 36이 47보다 사전 순으로 앞선다.
- 37−47−46−56−55 위의 경로와 비교하면 4번째 노드인 45가 56보다 사전 순으로 앞선다.
- 37−47−57−56−55 위의 경로와 비교하면 3번째 노드인 46이 57보다 사전순으로 앞선다.
입력으로 L, K, x, y가 주어졌을 때 Bob을 도와 x와 y사이의 최단 경로 중 사전 순으로 K번째 최단 경로를 구해보자. 만약 x와 y사이의 최단 경로의 개수가 K보다 작다면 "NO"를 출력하도록 한다.