Задачи
Непрефиксные коды
Непрефиксные коды
Рассмотрим множество из \textbf{n} символов \{\textbf{1}, \textbf{2}, ..., \textbf{n}\}. Пусть каждому из этих символов соспоставлен некоторый вектор\textbf{b_i} из \textbf{0} и \textbf{1}. Тогда каждая строка из исходных символов \textbf{c = c_1c_2...c_k} определяет вектор из \textbf{0} и \textbf{1}, получаемый конкатенцией \textbf{b_c1},\textbf{b_c2},...,\textbf{b_ck}, обозначим его за \textbf{B(c)}. Найдите самый короткий вектор \textbf{X}, состоящий из \textbf{0} и \textbf{1}, такой, что \textbf{X = B(c)} и \textbf{X = B(d)} для двух различных упорядоченных наборов \textbf{c} и \textbf{d}. Если таких последовательностей несколько, то выведите наименьшую в лексикографическом порядке. Гарантируется, что хотя бы одна такая последовательность будет существовать.
\InputFile
Первая строка входного файла содержит число \textbf{N} (\textbf{2} ≤ \textbf{N} ≤ \textbf{20}). Следующие \textbf{N} строк содержат вектора \textbf{b_i}, длиной не более \textbf{20}.
\OutputFile
В выходной файл выведите на первой строке длину найденной последовательности. На второй строке выведите саму последовательность.
Входные данные #1
5 0110 00 111 001100 110
Выходные данные #1
9 001100110