Олимпиадный тренинг

Задача . B. По следам строки


Поликарп потерял строку \(s\) из \(n\) строчных латинских букв, но у него остался её след.

Следом строки \(s\) называется массив \(a\) из \(n\) целых чисел, в котором \(a_i\) равен количеству таких \(j\) (\(j < i\)), что \(s_i=s_j\). Например, следом строки abracadabra является массив [\(0, 0, 0, 1, 0, 2, 0, 3, 1, 1, 4\)].

По заданному следу строки найдите любую строку \(s\), из которой он мог быть получен. Строка \(s\) должна состоять только из строчных латинских букв a-z.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину потерянной строки.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < n\)) — след строки. Гарантируется, что для заданного следа существует подходящая строка \(s\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку \(s\), которой соответствует данный след. Если таких строк \(s\) несколько, то выведите любую из них.

Строка \(s\) должна состоять из строчных латинских букв a-z.

Гарантируется, что для каждого набора входных данных ответ существует.


Примеры
Входные данныеВыходные данные
1 5
11
0 0 0 1 0 2 0 3 1 1 4
10
0 0 0 0 0 1 0 1 1 0
1
0
8
0 1 2 3 4 5 6 7
8
0 0 0 0 0 0 0 0
abracadabra
codeforces
a
aaaaaaaa
dijkstra

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя