역 Move-to-Front 변환
면접 대비시간 제한2초메모리 제한256 MB
Move-to-front 부호 수열에서 26자 알파벳 목록을 시뮬레이션해 원래 문자열을 복원합니다.
문제
Move-to-Front(MTF) 변환은 입력 데이터를 수열로 바꾸는 부호화 방식이다. MTF 변환을 거친 데이터에 엔트로피 부호화를 적용하면 압축률이 더 좋아지는 경우가 많다. 변환 자체는 간단하다. 다음은 소문자 알파벳으로만 이루어진 문자열의 MTF 변환이다.
- 소문자 알파벳 목록을 유지한다. 목록은 처음에 사전순으로 정렬되어 있다. 즉 시작할 때 목록은 [abcdefghijklmnopqrstuvwxyz]이다.
- 문자열에서 문자 를 하나 읽는다. 목록에서 의 인덱스를 출력한 다음, 를 목록 맨 앞으로 옮긴다.
- 문자열의 모든 문자를 읽을 때까지 2번을 반복한다.
문자열 hakka에 이 변환을 적용하면 다음 순서로 진행된다.
- 첫 번째 문자 h는 [abcdefghijklmnopqrstuvwxyz]에서 인덱스가 7이다. 7을 출력하고 h를 맨 앞으로 옮긴다.
- 두 번째 문자 a는 [habcdefgijklmnopqrstuvwxyz]에서 인덱스가 1이다. 1을 출력하고 a를 맨 앞으로 옮긴다.
- 세 번째 문자 k는 [ahbcdefgijklmnopqrstuvwxyz]에서 인덱스가 10이다. 10을 출력하고 k를 맨 앞으로 옮긴다.
- 네 번째 문자 k는 [kahbcdefgijlmnopqrstuvwxyz]에서 인덱스가 0이다. 0을 출력하고 k를 맨 앞으로 옮긴다.
- 다섯 번째 문자 a는 [kahbcdefgijlmnopqrstuvwxyz]에서 인덱스가 1이다. 1을 출력하고 a를 맨 앞으로 옮긴다.
즉 MTF 변환은 hakka를 수열 로 보낸다.
MTF 변환의 역변환을 구하는 프로그램을 작성하라. 수열 이 주어지면, MTF 변환이 으로 보내는 문자열 를 구하면 된다.
입력
첫 줄에 테스트 케이스의 개수 가 주어진다. 이다.
각 테스트 케이스는 두 줄이다. 첫 줄에는 수열의 길이를 나타내는 양의 정수 이 주어진다. 이다. 둘째 줄에는 공백으로 구분된 정수 이 주어진다. 모든 에 대해 이다.
출력
각 테스트 케이스마다 MTF 변환이 으로 보내는 문자열 를 한 줄에 출력한다.