Олимпиадный тренинг

Задача . C. Запоминаем строки


Задача

Темы: битмаски дп *2500

У вас есть набор из n строк одинаковой длины, состоящих из строчных букв английского языка. Будем говорить, что набор строк просто запомнить, если для каждой строки существует некоторая позиция i и некоторая буква c английского алфавита, такие, что эта строка является единственной в наборе, имеющей букву c в позиции i.

Например, набор строк {«abc», «aba», «adc», «ada»} нельзя просто запомнить. А набор {«abc», «ada», «ssa»} можно просто запомнить, поскольку:

  • первая строка является единственной строкой, имеющей символ c в позиции 3;
  • вторая строка является единственной строкой, имеющей символ d в позиции 2;
  • третья строка является единственной строкой, имеющей символ s в позиции 2.

Вы хотите немного изменить ваш набор так, чтобы его можно было просто запомнить. За aij монет вы можете изменить символ в j-й позиции в i-й строке на любой другую строчную букву английского алфавита. Определите, какое минимальное количество монет нужно заплатить за выполнение изменений, чтобы набор строк можно было просто запомнить.

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

В первой строке записано два целых числа n, m (1 ≤ n, m ≤ 20) — количество строк в наборе и длина строк, соответственно. В следующих n строках заданы строки набора, которые состоят только из строчных букв английского алфавита и имеют длину m.

В следующих n строках записано по целых m чисел, в i-й из них записаны целые числа ai1, ai2, ..., aim (0 ≤ aij ≤ 106).

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

Выведите единственное число — ответ на задачу.


Примеры
Входные данныеВыходные данные
1 4 5
abcde
abcde
abcde
abcde
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
3
2 4 3
abc
aba
adc
ada
10 10 10
10 1 10
10 10 10
10 1 10
2
3 3 3
abc
ada
ssa
1 1 1
1 1 1
1 1 1
0

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w644
Комментарий учителя