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

Задача . C. Флаг


Иннокентий работает на блошином рынке, продавая посетителям всякий хлам необычные вещи. Недавно он нашёл у себя на складе старое прямоугольное покрывало. Как оказалось, это покрывало имеет сетчатую форму, то есть покрывало состоит из \(n \cdot m\) цветных лоскутков, разбитых на \(n\) строк и \(m\) столбцов.

Цветные лоскутки привлекли внимание Иннокентия, и он сразу же придумал, как можно заработать на своей находке. Если вырезать из покрывала подпрямоугольник, состоящий из трёх цветных полос, то потом этот подпрямоугольник можно будет продать как флаг какой-нибудь страны. В частности, Иннокентий считает, что подпрямоугольник будет достаточно похож на флаг какой-нибудь страны, если он будет состоять из трёх одноцветных полос одинаковой высоты, находящихся друг под другом. Разумеется, цвет верхней полосы не должен совпадать с цветом средней полосы, а цвет средней не должен совпадать с цветом нижней.

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

  

Примеры подпрямоугольников, являющихся флагами

     

Примеры подпрямоугольников, не являющихся флагами

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 1\,000\)) — количество строк и столбцов в покрывале.

Каждая из следующих \(n\) строк описывает очередную строку покрывала и состоит из \(m\) строчных латинских букв от «a» до «z», где одинаковым цветам соответствуют одинаковые буквы, а разным цветам — разные буквы.

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

В единственной строке выведите одно целое число — количество подпрямоугольников, являющихся флагами.

Примечание
 

Пояснение к примеру. Выделены подпрямоугольники, являющиеся флагами


Примеры
Входные данныеВыходные данные
1 4 3
aaa
bbb
ccb
ddd
6
2 6 1
a
a
b
b
c
c
1

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

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