eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Сжатие

Сжатие

Вася твёрдо решил, что его не устраивает качество спам-фильтра на его почтовом ящике и решил сделать свой. Он подготовил список \textbf{L_0} из \textbf{1} ≤ \textbf{N_0} ≤ \textbf{5·10^4} слов, каждое длиной не менее чем \textbf{1} и не более чем \textbf{40} символов. По его мнению, любое сообщение, содержащее хотя бы одно из этих слов --- спам. \includegraphics{https://static.e-olymp.com/content/c1/c1e5657c445a0882d39a01c1538cf1a9c936ba83.jpg} \includegraphics{file:///E:/2012-2013/ACM/BSU-2012/problems/compression/statements/.html/russian/55769d612ffdece1c0167001ae185df8d8aac11c.png} Список получился большой, и Вася хочет его сжать. А именно: он хочет заменить список \textbf{L_0} на список непустых слов \textbf{L_1}, такой, чтобы для каждого слова \textbf{w_0L_0} существовало слово \textbf{w_1L_1}, являющееся префиксом слова \textbf{w_0}. Однако, если в \textbf{L_1} будут слишком короткие слова, то много сообщений будет ошибочно классифицировано, как спам. Подумав, Вася выработал критерий оптимальности: он хочет найти такой список \textbf{L_1}, чтобы штраф был минимален, где \textbf{|w|} обозначает длину строки \textbf{w}. Помогите Васе решить эту задачу. \InputFile Первая строка входа содержит \textbf{N_0} --- число слов в списке \textbf{L_0}. Последующие \textbf{N_0} строк содержат слова из списка \textbf{L_0}, состоящие из маленьких латинских символов. \OutputFile В первой строке выведите число \textbf{P}, соответствующее оптимальному списку \textbf{L_1}. Во второй строке выведите \textbf{N_1} --- число слов в списке \textbf{L_1}. В последующих строках выведите слова списка \textbf{L_1}. В случае, если существует несколько оптимальных решений, любое будет засчитано.
Лимит времени 2 секунды
Лимит использования памяти 64 MiB
Входные данные #1
4
abxcaba
abax
abay
abaz
Выходные данные #1
146028888064
2
aba
abxcaba
Источник NEERC Western Subregional Contest 2012