만드는 중입니다

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

LR

시간 제한2초메모리 제한1024 MB

요약
문자열 A의 앞이나 뒤에서 글자를 하나씩 꺼내 만들 수 있는 2^N개의 문자열 중 사전순으로 K번째 문자열을 구합니다.
난이도

보통10점 중 7점

유형
그리디, 문자열, 투 포인터
정답자
아직 제출이 없습니다

문제

영어 소문자로 이루어진 길이 NN의 문자열 AA가 주어진다.

희원이는 다음 두 가지 연산으로 길이 NN의 문자열 BB를 만들려고 한다. BB는 처음에 빈 문자열이다.

  • LL: AA의 첫 번째 문자를 BB의 맨 뒤에 추가한 뒤, AA의 첫 번째 문자를 삭제한다.
  • RR: AA의 마지막 문자를 BB의 맨 뒤에 추가한 뒤, AA의 마지막 문자를 삭제한다.

연산을 적용하는 서로 다른 방법은 총 2N2^N가지다. 연산으로 만들 수 있는 모든 문자열 중 사전순으로 KK번째에 위치하는 문자열을 출력한다.

결과로 나온 두 문자열이 같더라도 두 문자열을 만든 연산 과정이 다르면 서로 다른 문자열로 센다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤10 000)(1 \le T \le 10\ 000)

각 테스트 케이스는 두 줄로 이루어진다. 첫째 줄에 NN과 KK가 공백으로 구분되어 주어진다. (1≤N≤1 000(1 \le N \le 1\ 000; 1≤K≤min⁡(2N,1018))1 \le K \le \min(2^N, 10^{18}))

둘째 줄에는 영어 소문자로 이루어진 길이 NN의 문자열 AA가 주어진다.

모든 테스트 케이스의 N2N^2 합은 10610^6 이하이다.

출력

각 테스트 케이스마다 연산을 적용해 만들 수 있는 문자열 BB 중 사전순으로 KK번째에 위치하는 문자열을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    4
    4 5
    dcab
    1 1
    z
    10 777
    paappoqpwa
    6 32
    pjshwa
    
    예상 출력
    bdac
    z
    paawapppoq
    awpjsh