Конкатенація#2526

Конкатенація

1 секунда
64 мегабайти
Легка

Розглянемо два рядки і . Їх конкатенацією називається рядок, отриманий в результаті приєднання до рядка рядка . Цей рядок позначається як . Наприклад, конкатенацією рядків '' і '' буде рядок ''. Очевидно, що це визначення природним чином поширюється на конкатенацію довільної кількості рядків. Таким чином, конкатенацією нуля рядків буде порожній рядок, а конкатенацією одного рядка буде він сам.

Розглянемо певну множину , що складається з рядків. Замиканням цієї множини називається множина W^{*}, яка складається лише з тих рядків, які можна отримати внаслідок конкатенації нуля або більше рядків з множини . Таким чином, множина W^{*} містить порожній рядок, і якщо рядок належить W^{*}, а рядок належить , то рядок належить W^{*}. Більше того, всі елементи множини W^{*} можна подати у такому вигляді, тобто W^{*} є перетином всіх множин із зазначеними вище властивостями. Наприклад, якщо W=\{a, ab\}, то W^{*} складається з усіх рядків, у яких перед кожною літерою '' стоїть хоча б одна літера ''.

Задано певну множину рядків . Потрібно знайти множину , таку, що W^{*}=X^{*}, і множина має мінімально можливу кількість елементів. Якщо таких множин декілька, підходить будь-яка з них. Наприклад, якщо W=\{a, aabb, ab, ac, b, bac\}, то єдиною множиною, що задовольняє умови задачі, буде множина \{a, ac, b\}.

Вхідні дані

Вхідний файл складається з набору рядків, кожен з яких є елементом множини . Кожен рядок з множини зустрічається у вхідному файлі хоча б один раз. Сумарна довжина всіх рядків у вхідному файлі не перевищує 10^4. Кількість рядків у вхідному файлі не перевищує 10^4. Після кожного рядка з множини у вхідному файлі йде переведення рядка (пара символів з ASCII-кодами та ). Рядки складаються із символів з ASCII-кодами від до включно.

Вихідні дані

Виведіть у вихідний файл елементи лексикографічно мінімальної множини , яка задовольняє умови задачі. Кожен рядок множини має бути виведений рівно один раз. Рядки повинні йти у лексикографічному порядку (лексикографічний порядок використовується у словниках; у цьому порядку рядок '' менший за рядок '', і рядок '' менший за рядок '').

Приклади

Приклад 1

Loading
Loading