Лексикографический ранг
Как известно, алфавит — это стандартизированный набор букв, а слово — это наименьшая свободная форма в языке; оно может быть записано как последовательность букв и символизирует значение. Буквы, как элементы алфавитов, имеют предписанный порядок, обычно известный как алфавитный порядок. Принцип расширения алфавитного порядка на слова (лексикографический порядок) заключается в том, что все слова в списке, начинающиеся с одной и той же буквы, должны быть сгруппированы вместе и идти перед словами, начинающимися с буквы, которая идет позже в алфавитном порядке; внутри группы всех слов, начинающихся с одной и той же буквы, все слова, начинающиеся с одних и тех же двух букв, должны быть сгруппированы вместе, и так далее; таким образом, при сравнении двух слов для лексикографического порядка порядок определяется алфавитным порядком двух букв на позиции, где два слова впервые различаются. Если одно слово является префиксом другого, первое идет перед вторым.
Здесь нас интересует общий вид слов, не имеющих отношения к какому-либо конкретному языку. Каждое из таких, скажем, псевдослов будет упорядоченным подмножеством букв (то есть ни одна буква не повторяется, и не имеет значения, есть ли у слова значение в каком-либо реальном языке или нет). В качестве набора доступных букв мы будем использовать строчные (также называемые минускульными) формы латинского алфавита вместе с их стандартным алфавитным порядком:
a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z
Ваша задача — вычислить позицию данной строки (ее ранг) в списке всех псевдослов, которые мы можем сгенерировать, используя только символы строки (помните, что все они различны), отсортированные в лексикографическом порядке, а также найти псевдословы, соответствующие одному или нескольким заданным рангам.
Входные данные
Входные данные состоят из нескольких тестов. Первая строка для каждого из них содержит строку из (различных) символов латинского алфавита в нижнем регистре ('a - z'). Длина такой строки будет от 1 до 20 включительно. Следующие строки будут содержать целое число от 1 до общего числа псевдослов, которые можно сформировать из букв строки, до тех пор, пока не будет найдена новая строка или не закончится входной файл.
Выходные данные
Для каждого теста выведите строку с рангом входной строки в списке всех псевдослов, а затем напечатайте в отдельной строке каждое из псевдослов, ранжированных на позициях соответствующих входных чисел.