#include<bits/stdc++.h>
using namespace std;
int n, m; // 地图的行数和列数
char a[100][100]; // 地图数据,使用char类型来存储'*'和'~'
int x, k; // x用于计数污染区域数量,k用于计数当前污染区域的面积
int fx[4] = {0, 1, 0, -1}, fy[4] = {1, 0, -1, 0}; // DFS的方向偏移量
// 深度优先搜索函数,用于标记和计算连通的污染区域面积
void dfs(int x, int y) {
a[x][y] = '~'; // 标记当前位置为已访问
k++; // 增加当前污染区域的面积计数
for (int i = 0; i < 4; i++) { // 遍历四个方向
int tx = x + fx[i];
int ty = y + fy[i];
// 检查新位置是否在地图范围内且为污染区域且未被访问过
if (tx >= 1 && tx <= n && ty >= 1 && ty <= m && a[tx][ty] == '*') {
dfs(tx, ty); // 递归调用DFS
}
}
}
int main() {
cin >> n >> m; // 输入地图尺寸
for (int i = 1; i <= n; i++) { // 输入地图数据
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
int maxArea = 0, totalArea = 0; // 最大污染区域面积和总污染面积
for (int i = 1; i <= n; i++) { // 遍历地图查找污染区域
for (int j = 1; j <= m; j++) {
if (a[i][j] == '*') {
x++; // 增加污染区域计数
k = 0; // 重置当前污染区域面积计数
dfs(i, j); // 对当前污染区域执行DFS
if (k > maxArea) maxArea = k; // 更新最大污染区域面积
totalArea += k; // 累计总污染面积
}
}
}
cout << x << " " << totalArea << " " << maxArea << endl; // 输出结果
return 0;
}
/**************************************************************
Problem: 2112
User: zengdongxin
Language: C++
Result: Time Limit Exceed
****************************************************************/