光芒诞生后,人们不仅将其视为照亮周围的事物,更将其视为一种可以渗透到他们生活和空间中的力量。
他们梦想着建立一个光芒能普照每个人的新村庄。为了实现这一愿景,他们仔细挑选了一块光芒可以渗透到每个角落的土地。
追溯他们选择的土地,重新连接那些散落的碎片。
在这座古老的岛屿上,有一块呈 $N$ 行 $M$ 列网格状的土地。从上往下数第 $r$ 行、从左往右数第 $c$ 列的单元格记为 $(r, c)$。
光芒无法穿过坚硬的土壤——相反,它会轻轻地渗透过柔软且透明的地面。为了建设村庄,人们将土地区分为了光芒可以穿过的土地和可以建造房屋的土地。
他们决定在满足以下条件的土地区域内建设村庄:
- 该区域必须是一个正方形。
- 沿主对角线的单元格必须允许光芒通过。(主对角线是指从正方形左上角到右下角的对角线。)
- 主对角线以外的所有其他单元格必须适合建造房屋。
以下是 $K = 1, 2, 3$ 时合法的 $K \times K$ 区域示例。在下图中,黑色单元格是允许光芒通过的单元格,白色单元格是适合建造房屋的单元格。
在下方的示例中,左侧所示的 $4 \times 4$ 区域是建设村庄的合法区域。然而,右侧所示的区域是不合法的,因为并非所有非对角线单元格都适合建造房屋。
你的任务是对于每种尺寸,求出可以建设村庄的正方形区域的数量。
输入格式
第一行包含两个空格分隔的整数 $N$ 和 $M$,表示土地的大小。
接下来的 $N$ 行,每行包含 $M$ 个字符 $A_{i1}, A_{i2}, \dots, A_{iM}$,表示单元格 $(i, 1), (i, 2), \dots, (i, M)$ 的土地类型。如果 $A_{ij}$ 为 'X',表示该单元格允许光芒通过;如果 $A_{ij}$ 为 '.',表示该单元格适合建造房屋。
- $2 \le N \le 2000$
- $2 \le M \le 2000$
- $A_{ij}$ 为
'X'或'.'。($1 \le i \le N, 1 \le j \le M$)
输出格式
对于从 $1$ 到 $\min(N, M)$ 的每个整数 $K$,依次输出可以建设村庄的合法 $K \times K$ 正方形区域的数量,每行一个。
子任务
- 子任务 1(4 分):$A_{ij} = \text{'X'} \ (1 \le i \le N, 1 \le j \le M)$
- 子任务 2(11 分):$N = 2$
- 子任务 3(27 分):$N \le 80, M \le 80$
- 子任务 4(25 分):$N \le 400, M \le 400$
- 子任务 5(33 分):无附加限制。
样例
输入样例 1
4 4 X..X .X.. ..X. X..X
输出样例 1
6 3 2 0
输入样例 2
2 6 XXX..X .X.X..
输出样例 2
6 1
输入样例 3
4 5 XXXXX XXXXX XXXXX XXXXX
输出样例 3
20 0 0 0
输入样例 4
9 9 X.....X.. .X....X.. ..X...X.X ...X...X. X...X...X .X...X... ..XXXXX.. ...X...X. ....X...X
输出样例 4
23 12 6 3 0 0 0 0 0