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

Задача . D. Недешёвая строка


Пусть \(s\) — строка из строчных латинских букв. Eё цена — это сумма номеров букв, которые в неё входят. Например, цена строки abca равна \(1+2+3+1=7\).

Задана строка \(w\) и число \(p\). Удалите из \(w\) наименьшее количество букв, чтобы её цена стала меньше или равна чем \(p\) и выведите получившуюся строку. Обратите внимание, что получившаяся строка может быть пустой. Удалять можно произвольные буквы, они не обязаны идти подряд. Если цена заданной строки \(w\) меньше или равна \(p\), то ничего удалять не надо и необходимо вывести \(w\).

Обратите внимание, что при удалении буквы из \(w\) порядок остальных букв сохраняется. Например, при удалении буквы e из строки test получится tst.

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

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

Каждый набор входных данных состоит из двух строк.

Первая из них это строка \(w\), она непустая и состоит из строчных латинских букв. Её длина не превосходит \(2\cdot10^5\).

Вторая строка содержит целое число \(p\) (\(1 \le p \le 5\,200\,000\)).

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

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

Выведите ровно \(t\) строк, \(i\)-я из них должна содержать ответ на \(i\)-й набор входных данных. Выведите наиболее длинную строку, которая получена из \(w\) удалением букв такую, что её цена меньше или равна \(p\). Если ответов несколько, то выведите любой из них.

Обратите внимание, что пустая строка — это один из возможных ответов. В таком случае просто выведите пустую строку в выходные данные.


Примеры
Входные данныеВыходные данные
1 5
abca
2
abca
6
codeforces
1
codeforces
10
codeforces
100
aa
abc

cdc
codeforces

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

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