#863. 子网格计数

子网格计数

题目描述

给定一个 NNNN 列的网格。其中第 ii 行第 jj 列的格子的颜色由字符 Si,jS_{i,j} 给定:如果 Si,jS_{i,j}#,表示该格子被涂成黑色;如果 Si,jS_{i,j}.,表示该格子被涂成白色。

你需要从这个网格中截取一个 MMMM 列的区域。请问总共可以得到多少种不同的染色图案?(如果两个图案对应位置的格子颜色完全相同,则视为同一种图案。)

输入格式

第一行包含两个整数 N,MN, M —— 分别表示原网格的大小和截取区域的大小。

接下来 NN 行,每行包含一个长度为 NN 的字符串,其中第 ii 行的第 jj 个字符 Si,jS_{i,j} 表示相应格子的颜色。

输出格式

输出一行,一个整数,表示能够得到的不同的染色图案数量。

样例输入 1

3 2
...
###
#.#

样例输出 1

3

样例输入 2

10 3
..#.......
.###......
.#.#......
#####.....
#...#.....
......####
......#..#
......#...
......#..#
......####

样例输出 2

36

说明

样例解释

在第一个样例中,可以从 3×33 \times 3 的网格中截取出 442×22 \times 2 的区域:

在这 44 种截取结果中,左上角和右上角的区域图案是相同的,因此总共有 33 种不同的染色图案。

数据范围

  • 对于所有测试点,保证 1MN101 \le M \le N \le 10
  • 保证所有的 Si,jS_{i,j} 均为 .#