Заплутані Імена для Входу
Університет Meikyokan славиться своїми дослідженнями та навчанням у галузі комп'ютерних наук. Університетський комп'ютерний центр оснащений сучасними та безпечними обчислювальними засобами, включаючи суперкомп'ютери та численні персональні комп'ютери, підключені до Інтернету.
Однією з політик комп'ютерного центру є надання студентам можливості обирати власні імена для входу. На жаль, студенти часто обирають схожі імена, що призводить до помилок при введенні або вказанні імен, і такі проблеми є досить поширеними. Це створює додаткове навантаження на персонал комп'ютерного центру.
Щоб уникнути таких проблем, доктор Чоей Такано, головний менеджер комп'ютерного центру, вирішив усунути схожі та заплутані імена для входу. Для цього Такано має розробити програму, яка виявляє заплутані імена для входу.
Відстань між двома іменами для входу визначається як мінімальна кількість операцій, необхідних для перетворення одного імені в інше, на основі наступних чотирьох операцій над рядками:
Видалення символу в довільній позиції.
Вставка символу в довільну позицію.
Заміна символу в довільній позиції на інший символ.
Обмін двох сусідніх символів у довільній позиції.
Наприклад, відстань між "omura" та "murai" дорівнює двом, оскільки наступна послідовність операцій перетворює "omura" в "murai".
Інший приклад: відстань між "akasan" та "kaason" також дорівнює двом.
Такано вирішив, що два імена для входу з малою відстанню є заплутаними і повинні бути уникнені.
Ваше завдання — написати програму, яка визначає всі заплутані пари імен для входу.
Будьте уважні, оскільки правила можуть комбінуватися в складні способи. Наприклад, відстань між "ant" та "neat" дорівнює двом.
Вхідні дані
Вхід складається з кількох наборів даних. Кожен набір даних подається у наступному форматі.
n
d
name_1
name_2
...
name_n
Перше ціле число n — це кількість імен для входу. Потім йде додатне ціле число d. Два імені для входу, відстань між якими менша або дорівнює d, вважаються заплутаними. Ви можете припустити, що 0 < n ≤ 200 і 0 < d ≤ 2. Ім'я для входу i-го студента задається name[i], яке складається лише з малих літер. Його довжина менше 16. Ви можете припустити, що в name[i] немає дублікатів (1 ≤ i ≤ n).
Кінець вводу позначається рядком, що містить лише нуль.
Вихідні дані
Для кожного набору даних ваша програма повинна вивести всі пари заплутаних імен для входу, по одній парі на рядок, після чого загальну кількість заплутаних пар у наборі даних.
У кожній парі два імені для входу мають бути розділені лише символом коми (,), і ім'я для входу, яке алфавітно передує іншому, має з'явитися першим. Весь вивід заплутаних пар для кожного набору даних має бути відсортований наступним чином. Для двох пар "w1, w2" і "w3, w4", якщо w1 алфавітно передує w3, або вони однакові і w2 передує w4, то "w1, w2" має з'явитися перед "w3, w4".