#include <iostream>
#include <iomanip>
#include <cmath>
#include <vector>
#include <set>
#include <climits>
#include <algorithm>
#include <map>
using namespace std;
int n, m;
char a[1001][1001];
bool visited[1001][1001];
int dx[4] = { 1,-1,0,0 };
int dy[4] = { 0,0,1,-1 };
const int MOD = (int)(1e9 + 7);
void dfs(int x, int y, int& area) {
visited[x][y] = 1;
area++;
for (int i = 0;i < 4;i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && !visited[nx][ny] && a[nx][ny] == '*') {
dfs(nx, ny, area);
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
multiset<int> se;
for (int i = 0;i < n;i++) {
for (int j = 0;j < m;j++) {
cin >> a[i][j];
}
}
for (int i = 0;i < n;i++) {
for (int j = 0;j < m;j++) {
if (a[i][j] == '*' && !visited[i][j]) {
int area = 0;
dfs(i, j, area);
se.insert(area);
}
}
}
for (auto value : se) {
cout << value << " ";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8Y2xpbWl0cz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPG1hcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBuLCBtOwpjaGFyIGFbMTAwMV1bMTAwMV07Cgpib29sIHZpc2l0ZWRbMTAwMV1bMTAwMV07CmludCBkeFs0XSA9IHsgMSwtMSwwLDAgfTsKaW50IGR5WzRdID0geyAwLDAsMSwtMSB9OwoKY29uc3QgaW50IE1PRCA9IChpbnQpKDFlOSArIDcpOwoKdm9pZCBkZnMoaW50IHgsIGludCB5LCBpbnQmIGFyZWEpIHsKICAgIHZpc2l0ZWRbeF1beV0gPSAxOwogICAgYXJlYSsrOwogICAgZm9yIChpbnQgaSA9IDA7aSA8IDQ7aSsrKSB7CiAgICAgICAgaW50IG54ID0geCArIGR4W2ldOwogICAgICAgIGludCBueSA9IHkgKyBkeVtpXTsKCiAgICAgICAgaWYgKG54ID49IDAgJiYgbnggPCBuICYmIG55ID49IDAgJiYgbnkgPCBtICYmICF2aXNpdGVkW254XVtueV0gJiYgYVtueF1bbnldID09ICcqJykgewogICAgICAgICAgICBkZnMobngsIG55LCBhcmVhKTsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgCiAgICBjaW4gPj4gbiA+PiBtOwoKICAgIG11bHRpc2V0PGludD4gc2U7CgogICAgZm9yIChpbnQgaSA9IDA7aSA8IG47aSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7aiA8IG07aisrKSB7CiAgICAgICAgICAgIGNpbiA+PiBhW2ldW2pdOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBpID0gMDtpIDwgbjtpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMDtqIDwgbTtqKyspIHsKICAgICAgICAgICAgaWYgKGFbaV1bal0gPT0gJyonICYmICF2aXNpdGVkW2ldW2pdKSB7CiAgICAgICAgICAgICAgICBpbnQgYXJlYSA9IDA7CiAgICAgICAgICAgICAgICBkZnMoaSwgaiwgYXJlYSk7CiAgICAgICAgICAgICAgICBzZS5pbnNlcnQoYXJlYSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBmb3IgKGF1dG8gdmFsdWUgOiBzZSkgewogICAgICAgIGNvdXQgPDwgdmFsdWUgPDwgIiAiOwogICAgfQogICAgcmV0dXJuIDA7Cn0K