(только c ++)
1 секунда
256 мегабайт
все чего-то боятся. кто-то боится темноты, кто-то боится высоты, кто-то боится общественных туалетов (все мы боимся общественных туалетов), кто-то боится долгов есть много страхов, но самый большой среди всех для unknown_user2019 - это выбор земля для посадки клубники. участок unknown_user2019 можно описать как матрицу с n строками и m столбцами. некоторые поля в матрице подходят для посадки клубники, а некоторые нет - там растут сорняки. unknown_user2019 ищет прямоугольные участки земли, которые полностью заполнены полями, подходящими для посадки клубники. эти виды прямоугольников называются подходящими прямоугольниками. также unknown_user2019 интересуется потенциальным значением всех полей в матрице. потенциальное значение каждого поля в матрице определяется как количество подходящих прямоугольников, содержащих это поле. так как unknown_user2019 испытывает проблемы, связанные с его страхами, он просит вас вычислить только сумму потенциальных значений всех полей. ввод первая строка содержит два натуральных числа n и m (1 ≤ n, m ≤ 2 000), размеры земли. следующие n строк содержат по m символов, представляющих ландшафт. каждый символ может быть или «.» (точка), которая представляет поле, подходящее для посадки, или «#», который представляет сорняки. выход выведите сумму всех потенциальных значений полей матрицы.
оценка в тестовых случаях, оценивающих в 20% от общего количества , он будет считать, что 1 ≤ n, m ≤ 10. в тестовых случаях, оцениваемых в дополнительные 30% от общего количества , он будет удерживать это 1 ≤ n, m ≤ 300.
вход
2 3
.#.
..#
выход
8
вход
3 3
выход
100
вход
3 4
..#.
#
#
выход
40
разъяснение первого образца теста: следующая матрица описывает потенциальные значения полей земли. сумма всех потенциальных значений составляет 8.
2 0 1
3 2 0