F. Рэп игра
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Как вы знаете, Уфа — город рэперов. Говорят, что для получения звания почетного жителя этого города нужно решить следующую задачу.

Вам предлагается написать куплет для вашей песни. Однако сами строки уже были выбраны за вас, и вам лишь остается расставить их в нужном порядке.

Предложенные строки настолько сложные, что любой слушатель захочет прочитать составленный вами текст для лучшего понимания. Именно поэтому ваша задача сделать упор на графическую рифму. Графическая рифма - это рифма из слов, окончания которых совпадают по написанию. Таким образом, качество куплета определяется суммой уровней созвучности всех пар соседних строк. Уровень созвучности двух строк определяется следующим образом:

  • Пусть даны строки $$$a$$$ и $$$b$$$ длины $$$n$$$ и $$$m$$$ соответсвенно.
  • Тогда уровень созвучности будет равен максимальному по длине совпадающему суффиксу двух данных строк. По-другому: он будет равен такому максимальному $$$i$$$ $$$(1 \le i \le min(n, m))$$$, что последние $$$i$$$ символов у данных строк будут совпадать. Формально говоря, $$$a_{n-i+1...n} = b_{m-i+1...m}$$$ (то есть для всех $$$j$$$ ($$$0 \le j \lt i$$$) верно, что $$$a_{n - j} = b_{m - j}$$$). Если $$$a_{n}$$$ не равен $$$b_{m}$$$, то уровень созвучности равен $$$0$$$.

Внимание! При подсчёте уровня созвучности учитываются абсолютно все символы, включая пробел и знаки препинания (ведь при чтении текста они выделяются интонацией, что тоже влияет на восприятие куплета).

Например, уровень созвучности строк "abac caba" и "babc caba" равен $$$6$$$, так как они имеют общий суффикс "c caba" длины $$$6$$$.

Вам дали набор $$$S$$$, состоящий из $$$n$$$ строк. Пусть $$$f(x, y)$$$ - уровень созвучности строк $$$x$$$ и $$$y$$$. Тогда качество куплета равно сумме $$$f(S_i, S_{i+1})$$$ $$$(1 \le i \le n-1)$$$. Требуется так расставить строки, чтобы качество куплета было максимальным. Гарантируется, что строки состоят из строчных букв английского алфавита a-z, знаков препинания ,.!?' и пробела.

Входные данные

В первой строке дано число $$$n$$$ $$$1 \le n \le 10^6$$$ — количество строк в наборе.

Затем следуют $$$n$$$ строк, $$$i$$$-я из которых содержит непустую строку $$$S_i$$$. Гарантируется, что сумма длин всех строк не превосходит $$$10^6$$$.

Выходные данные

В первой строке выведите качество созданного вами куплета. Затем выведите $$$n$$$ строк, в том порядке, в котором вы их расставили, чтобы получить максимальную суммарную созвучность.

Система оценки
ПодзадачаБаллыДополнительные ограниченияНеобходимые подзадачи
$$$0$$$$$$0$$$Тесты из условия
$$$1$$$$$$17$$$$$$n \le 7$$$ и длина каждой строки не более $$$1000$$$
$$$2$$$$$$23$$$Все строки состоят только из букв a и b
$$$3$$$$$$21$$$Длина каждой строки не больше $$$2$$$
$$$4$$$$$$39$$$0-3
Примеры
Входные данные
8
baby shark, doo-doo, doo-doo, doo-doo
baby shark
mommy shark
baby shark, doo-doo, doo-doo, doo-doo
mommy shark, doo-doo, doo-doo, doo-doo
mommy shark, doo-doo, doo-doo, doo-doo
baby shark, doo-doo, doo-doo, doo-doo
mommy shark, doo-doo, doo-doo, doo-doo
Выходные данные
191
baby shark
mommy shark
baby shark, doo-doo, doo-doo, doo-doo
baby shark, doo-doo, doo-doo, doo-doo
baby shark, doo-doo, doo-doo, doo-doo
mommy shark, doo-doo, doo-doo, doo-doo
mommy shark, doo-doo, doo-doo, doo-doo
mommy shark, doo-doo, doo-doo, doo-doo
Входные данные
5
she was looking kinda dumb
i ain't the sharpest tool in the shed
somebody once told me
with her finger and her thumb
the world is gonna roll me
Выходные данные
6
somebody once told me
the world is gonna roll me
i ain't the sharpest tool in the shed
she was looking kinda dumb
with her finger and her thumb
Входные данные
3
abac caba
aboba
babc caba
Выходные данные
8
abac caba
babc caba
aboba
Входные данные
4
aa
bab
aabab
baa
Выходные данные
5
aa
baa
bab
aabab
Примечание

Пояснение к примеру 3:

  • Первые две строки имеют общий суффикс "c caba" длины $$$6$$$.
  • Вторая и третья строки имеют общий суффикс "ba" длины $$$2$$$.

Итого, качество куплета составляет $$$2+6=8$$$. Можно доказать, что это максимальное возможное значение.