Лексикографічний ранг
Як відомо, алфавіт — це стандартизований набір літер, а слово — це найменша вільна форма в мові; його можна записати як послідовність літер, і воно символізує значення. Літери, як елементи алфавітів, мають визначений порядок, загальновідомий як алфавітний порядок. Принцип розширення алфавітного порядку на слова (лексикографічний порядок) полягає в тому, що всі слова в списку, які починаються з однієї й тієї ж літери, повинні бути згруповані разом і перед будь-якими словами, що починаються з літери, яка йде пізніше в алфавітному порядку; у групі всіх слів, що починаються з однієї й тієї ж літери, всі слова, що починаються з одних і тих самих двох літер, повинні бути згруповані разом і так далі; таким чином, при порівнянні двох слів для лексикографічного порядку, порядок визначається алфавітним порядком двох літер у позиції, де два слова вперше відрізняються. Якщо слово є префіксом іншого, перше йде перед другим.
Тут нас цікавить загальний вид слів, які не мають відношення до якоїсь конкретної мови. Кожне з таких, скажімо, псевдослів буде впорядкованою підмножиною літер (тобто жодна літера не повторюється і не має значення, чи має слово значення в якійсь реальній мові чи ні). Як набір доступних літер ми будемо використовувати малі (також звані мінускульними) форми латинського алфавіту разом з їх стандартним алфавітним порядком:
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 до загальної кількості псевдослів, які можна утворити з літер рядка, до тих пір, поки не буде знайдено новий рядок або не закінчиться вхідний файл.
Вихідні дані
Для кожного тестового випадку виведіть рядок з рангом вхідного рядка у списку всіх псевдослів, а потім надрукуйте в окремому рядку кожне з псевдослів, що займають позиції відповідних вхідних чисел.