#924. 十字
十字
题目描述
我们有一个 行 列的网格。记从上往下数第 行、从左往右数第 列的格子为 。
网格中的每个格子上写有字符 # 或 .。记 为写在 上的字符。对于违反 或 中至少一个条件的整数 和 ,我们规定 为 .。
一个以 为中心、大小为 ()的“十字”由 个格子组成,包含 以及 ()。这 个格子能被称为十字,当且仅当满足以下所有条件:
- 是
#。 - 对于所有满足 的整数 ,、、 和 均是
#。 - 、、 和 中至少有一个是
.。
例如,下图中的网格有一个以 为中心、大小为 的十字,以及另一个以 为中心、大小为 的十字。

网格中包含若干个十字。除了组成十字的格子外,没有任何其他格子是 #。
此外,属于两个不同十字的任意两个格子不会共用一个角(即不会对角相邻)。下图中的两个网格展示了“属于不同十字的两个格子共用一个角”的例子;此类网格不会作为输入给出。例如,左侧的网格是不合法的,因为 和 共用了一个角。

设 ,并令 为大小为 的十字的数量。请计算并输出 。
输入格式
第一行包含两个正整数 和 —— 分别表示网格的行数和列数。
接下来 行,每行包含一个长度为 的字符串。其中第 行的第 个字符表示 。
输出格式
输出一行,包含 个整数 ,相邻两个整数之间用一个空格隔开。
样例输入 1
5 9
#.#.#...#
.#...#.#.
#.#...#..
.....#.#.
....#...#
样例输出 1
1 1 0 0 0
样例输入 2
3 3
...
...
...
样例输出 2
0 0 0
样例输入 3
3 16
#.#.....#.#..#.#
.#.......#....#.
#.#.....#.#..#.#
样例输出 3
3 0 0
样例输入 4
15 20
#.#..#.............#
.#....#....#.#....#.
#.#....#....#....#..
........#..#.#..#...
#.....#..#.....#....
.#...#....#...#..#.#
..#.#......#.#....#.
...#........#....#.#
..#.#......#.#......
.#...#....#...#.....
#.....#..#.....#....
........#.......#...
#.#....#....#.#..#..
.#....#......#....#.
#.#..#......#.#....#
样例输出 4
5 0 1 0 0 0 1 0 0 0 0 0 0 0 0
说明
样例解释
- 在第一个样例中,如题目描述所述,存在一个以 为中心、大小为 的十字,以及一个以 为中心、大小为 的十字。
- 在第二个样例中,网格中可能不存在任何十字。
数据范围
- 对于所有测试点,保证 。
- 保证 均为
#或.。 - 保证属于两个不同十字的任意两个格子不会共用一个角。
- 保证所有的 和 均为整数。