#include <bits/stdc++.h>
using namespace std;
long long n,m,w,sum;
long long x,y,k[1505];
char mp[1505][1505];
bool vis[1505][1505],f = 1;
int px[100], py[100];
long long max_,p;
int dx[8] = {0, 1, 1, 1, 0, -1, -1, -1};
int dy[8] = {1, 1, 0, -1, -1, -1, 0, 1};
bool in(int xx, int yy) {
return xx>=1&&xx<=n&&yy>=1&&yy<=m;
}
void dfs(int x, int y)
{
int nx,ny;
k[w]++;
mp[x][y] = '.';
for(int i = 0; i < 8; i++)
{
nx = x + dx[i];
ny = y + dy[i];
if(in(nx, ny) && mp[nx][ny] == '*')
{
dfs(nx, ny);
}
}
return ;
}
int main()
{
freopen("P6566_5.in","r",stdin);
freopen("P6566_5.ans","w",stdout);
cin >> n >> m;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
cin>>mp[i][j];
}
}
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
if(mp[i][j] == '*')
{
w++;
dfs(i,j);
}
}
}
sort(k + 1,k + w + 1,greater<int>());
for(int i = 1;i<=w;i++) cout<<k[i]<<" ";
cout<<"\n";
for(int i = 1;i<w;i++)
{
if(k[i] != k[i + 1])
{
max_ = max((p + 1) * k[i],max_);
sum++;
p = 0;
}
else
{
p++;
}
if(i + 1 == w)
{
max_ = max((p + 1) * k[i + 1],max_);
sum++;
}
}
cout<<sum<<" "<<max_;
return 0;
}