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

Сполучення

Сполучення

Вы играете в головоломку - пасьянс под названием "Соединение", в которой используется несколько букв - плиток. Имеется \textbf{R}×\textbf{C} пустых ячеек. Для каждого \textbf{i} (\textbf{1} ≤ \textbf{i} ≤ \textbf{R}) необходимо вставить строку \textbf{s_i} (\textbf{1} ≤ \textbf{|s_i|} ≤ \textbf{C}) в \textbf{i}-ую строку таблицы без изменения порядка букв. Другими словами необходимо выбрать такую целочисленную последовательность \textbf{a_j}, что \textbf{1} ≤ \textbf{a_1} < \textbf{a_2} <…< \textbf{a_\{|si|\}} ≤ \textbf{C}, и вставить \textbf{j}-ый символ строки \textbf{s_i} в \textbf{a_j}-ую колонку (\textbf{1} ≤ \textbf{j} ≤ \textbf{|s_i|}). Например, если \textbf{C = 8} и \textbf{s_i = "ICPC"}, можно вставить \textbf{s_i} одним из следующих методов: \textbf{I_C_P_C_} \textbf{ICPC____} \textbf{_IC___PC} '\textbf{_}' представляет собой пустую ячейку. Для каждой непустой ячейки \textbf{x} Вы получаете количество балов, равное числу соседних ячеек содержащих ту же букву что и \textbf{x}. Две ячейки являются соседними, если у них общая сторона. Вычислить наибольшее количество баллов, которое Вы сможете получить. \InputFile Первая строка содержит два целых числа \textbf{R} и \textbf{C} (\textbf{1} ≤ \textbf{R} ≤ \textbf{128}, \textbf{1} ≤ \textbf{C} ≤ \textbf{16}). Далее следуют \textbf{R} строк, каждая из которых содержит \textbf{s_i} (\textbf{1} ≤ \textbf{|s_i|} ≤ \textbf{C}). Все символы \textbf{s_i} являются заглавными буквами. \OutputFile Вывести наибольшее количество балов, которое можно получить.
Ліміт часу 5 секунд
Ліміт використання пам'яті 64 MiB
Вхідні дані #1
2 4
ACM
ICPC
Вихідні дані #1
2
Джерело JAG Summer 2012, Japan