#924. 十字

十字

题目描述

我们有一个 HHWW 列的网格。记从上往下数第 ii 行、从左往右数第 jj 列的格子为 (i,j)(i, j)

网格中的每个格子上写有字符 #.。记 C[i][j]C[i][j] 为写在 (i,j)(i, j) 上的字符。对于违反 1iH1 \le i \le H1jW1 \le j \le W 中至少一个条件的整数 iijj,我们规定 C[i][j]C[i][j].

一个以 (a,b)(a, b) 为中心、大小为 nnn1n \ge 1)的“十字”由 (4n+1)(4n+1) 个格子组成,包含 (a,b)(a, b) 以及 (a+d,b+d),(a+d,bd),(ad,b+d),(ad,bd)(a+d, b+d), (a+d, b-d), (a-d, b+d), (a-d, b-d)1dn1 \le d \le n)。这 (4n+1)(4n+1) 个格子能被称为十字,当且仅当满足以下所有条件:

  • C[a][b]C[a][b]#
  • 对于所有满足 1dn1 \le d \le n 的整数 ddC[a+d][b+d]C[a+d][b+d]C[a+d][bd]C[a+d][b-d]C[ad][b+d]C[a-d][b+d]C[ad][bd]C[a-d][b-d] 均是 #
  • C[a+n+1][b+n+1]C[a+n+1][b+n+1]C[a+n+1][bn1]C[a+n+1][b-n-1]C[an1][b+n+1]C[a-n-1][b+n+1]C[an1][bn1]C[a-n-1][b-n-1] 中至少有一个是 .

例如,下图中的网格有一个以 (2,2)(2, 2) 为中心、大小为 11 的十字,以及另一个以 (3,7)(3, 7) 为中心、大小为 22 的十字。

网格中包含若干个十字。除了组成十字的格子外,没有任何其他格子是 #

此外,属于两个不同十字的任意两个格子不会共用一个角(即不会对角相邻)。下图中的两个网格展示了“属于不同十字的两个格子共用一个角”的例子;此类网格不会作为输入给出。例如,左侧的网格是不合法的,因为 (3,3)(3, 3)(4,4)(4, 4) 共用了一个角。

N=min(H,W)N = \min(H, W),并令 SnS_n 为大小为 nn 的十字的数量。请计算并输出 S1,S2,,SNS_1, S_2, \dots, S_N

输入格式

第一行包含两个正整数 HHWW —— 分别表示网格的行数和列数。

接下来 HH 行,每行包含一个长度为 WW 的字符串。其中第 ii 行的第 jj 个字符表示 C[i][j]C[i][j]

输出格式

输出一行,包含 NN 个整数 S1,S2,,SNS_1, S_2, \dots, S_N,相邻两个整数之间用一个空格隔开。

样例输入 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

说明

样例解释

  • 在第一个样例中,如题目描述所述,存在一个以 (2,2)(2, 2) 为中心、大小为 11 的十字,以及一个以 (3,7)(3, 7) 为中心、大小为 22 的十字。
  • 在第二个样例中,网格中可能不存在任何十字。

数据范围

  • 对于所有测试点,保证 3H,W1003 \le H, W \le 100
  • 保证 C[i][j]C[i][j] 均为 #.
  • 保证属于两个不同十字的任意两个格子不会共用一个角。
  • 保证所有的 HHWW 均为整数。