Задачі
Сполучення
Сполучення
Вы играете в головоломку - пасьянс под названием "Соединение", в которой используется несколько букв - плиток.
Имеется \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
Вывести наибольшее количество балов, которое можно получить.
Вхідні дані #1
2 4 ACM ICPC
Вихідні дані #1
2