K번째 최단 경로

아직 제출이 없습니다시간 제한1초메모리 제한512 MB

문제

Bob와 Alice는 그래프에서 최단 경로를 찾는 게임을 즐겨한다.

동생 Bob은 아직 어려서 실수를 많이 하기 때문에 Alice는 Bob가 연습할 수 있도록 다음과 같은 문제를 제시했다.

먼저, 길이를 나타내는 정수 LL을 정한 후, 00부터 10L110^L-1 까지의 총 10L10^L개의 양의 정수를 이용하여 아래 규칙에 따라 그래프를 만든다:

  • 노드: 00부터 10L110^L-1 까지의 각 정수는 그래프의 고유한 노드를 나타낸다. 이 때, 각 정수는 선행하는 00을 붙여 반드시 길이가 LL이 되도록 만든다. 예를 들어 L=2L = 2라면 00,01,02,,98,9900, 01, 02, \dots, 98, 99로 총 100100개의 노드를 만들게 된다.
  • 간선: 두 정점 (x,y)(x, y) 사이에 간선이 있으려면 xxyy11의 자리, 1010의 자리, ..., 10L110^{L-1}의 자리를 비교했을 때 딱 한 곳만 달라야 하고 그 차이가 정확히 11이 되어야 한다. 예를 들어 L=2L = 2인 경우, 00000101, 01011111, 27273737, 36364646 사이에는 간선이 있고, 00000202, 01011010, 36364747 혹은 46465757사이에는 간선이 없다.

아래 그림은 L=2L = 2 인 경우 그래프의 일부를 보여준다.

위 규칙에 따라 그래프를 만든 뒤, Alice는 Bob에게 두 정점 xxyy사이의 최단 경로 중 사전 순으로 정렬했을 시 KK번째에 해당하는 최단 경로를 찾아보라고 했다. 예를 들어 L=2L = 2, x=37x = 37, y=55y = 55인 경우를 생각해보자. 이 경우 두 노드 사이의 최단 거리는 44이며, 아래와 같이 총 여섯 개의 최단 경로가 존재한다. 만약 K=3K = 3이라면 정답은 33번째 최단 경로인 373646565537 - 36 - 46 - 56 - 55가 된다.

  1. 373635455537 - 36 - 35 - 45 - 55
  2. 373646455537 - 36 - 46 - 45 - 55 위의 경로와 비교하면 33번째 노드인 35354646보다 사전 순으로 앞선다.
  3. 373646565537 - 36 - 46 - 56 - 55 위의 경로와 비교하면 44번째 노드인 45455656보다 사전 순으로 앞선다.
  4. 374746455537 - 47 - 46 - 45 - 55 위의 경로와 비교하면 22번째 노드인 36364747보다 사전 순으로 앞선다.
  5. 374746565537 - 47 - 46 - 56 - 55 위의 경로와 비교하면 44번째 노드인 45455656보다 사전 순으로 앞선다.
  6. 374757565537 - 47 - 57 - 56 - 55 위의 경로와 비교하면 33번째 노드인 46465757보다 사전순으로 앞선다.

입력으로 LL, KK, xx, yy가 주어졌을 때 Bob을 도와 xxyy사이의 최단 경로 중 사전 순으로 KK번째 최단 경로를 구해보자. 만약 xxyy사이의 최단 경로의 개수가 KK보다 작다면 "NO"를 출력하도록 한다.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다.

각 테스트 케이스의 입력은 한 줄에 LL, KK, xx, yy가 공백으로 구분되어 주어진다.

출력

각 테스트 케이스의 정답을 각 줄에 출력한다.

KK번째 최단 경로가 존재하는 경우 해당 최단 경로를 출력하고, 그렇지 않은 경우 "NO"를 출력한다 (따옴표 제외).

제한

  • 1T151 ≤ T ≤ 15
  • 2L42 ≤ L ≤ 4
  • 1K10181 ≤ K ≤ 10^{18}
  • 0x,y<10L0 ≤ x, y < 10^L
  • xx, yy는 언제나 선행 00을 포함하여 길이가 LL인 형태로 주어진다.