문제
N개의 서로 다른 문자들이 차례로 주어질 때,
이 문자들을 스택에 어떤 방법으로 넣고(push) 꺼내는(pop)가에 따라 다른 문자열이 얻어진다.
예를 들어 ABC 세 문자가 주어질 때, 이 문자를 스택에 넣고 꺼내는 방법을 달리한 결과
다음과 같은 문자열이 생성된다.
ABC : push(A), pop(), push(B), pop(), push(C), pop()
ACB : push(A), pop(), push(B), push(C), pop(), pop()
BAC : push(A), push(B), pop(), pop(), push(C), pop()
BCA : push(A), push(B), pop(), push(C), pop(), pop()
CBA : push(A), push(B), push(C), pop(), pop(), pop()
순열과는 다르게 CAB는 만들어지지 않는다는 점에 유의한다.
문자열 개수 N( 1 <= N <= 36 )과 정수 K가 주어질 때,
사전편집상 오름차순으로 K 번째 스택 문자열을 구해보자.
N이 의미하는 바는 문자열 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"의
첫 문자부터 연속된 N개의 문자가(들이) 사용된다는 것이다.
예를 들어, N = 3 인 경우 사용되는 문자열은 "012" 이고,
N = 6 인 경우 사용되는 문자열은 "012345" 이다.
입력
첫 행에 테스트 케이스의 수 T( 1 <= T <= 100,000)가 입력된다.
다음 T개의 행에 N( 1 <= N <= 36 ) 과 정수 K (1 <= K <= 18*1018), 그리고 정렬방법 M이 공백을 구분하여 주어진다.
M이 0인 경우 오름차순으로, 1인 경우 내림차순으로 K번째 스택문자열을 구하라는 의미이다.
출력
각 테스트 케이스에 대하여 사전편집상 방법 M으로 K 번째 스택 문자열을 행으로 구분하여 출력한다.
N개의 문자열에 대한 K번째 스택문자열이 존재하지 않는 경우 -1을 출력한다.
예제
7
5 30 0
2 5 1
11 52375 0
8 1429 0
10 5340 1
3 1 1
7 321 1
21043
-1
368975421A0
67543210
2315487690
210
0354261