#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
//英语 看博友分析 dfs
char mp[100][100];
int da[100][100];
int vis[100][100];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int flag;
int m,n;
int hs[10000];
void dfs1(int x,int y)
{
vis[x][y]=1;
if(mp[x][y]=='*')
{
da[x][y]=0;
}
if(mp[x][y]=='X')
{
da[x][y]=flag;
}
for(int i=0;i<4;i++)
{
int tx=x+dx[i];
int ty=y+dy[i];
if(tx>=0 && tx<n && ty>=0 && ty<m &&(mp[tx][ty]=='X'||mp[tx][ty]=='*')&&vis[tx][ty]==0)
{
dfs1(tx,ty);
}
}
}
void dfs2(int x,int y)
{
int zhi=da[x][y];
da[x][y]=0;
for(int i=0;i<4;i++)
{
int tx=x+dx[i];
int ty=y+dy[i];
if(tx>=0&& tx<n && ty>=0 && ty<m&& da[tx][ty]==zhi)
{
dfs2(tx,ty);
}
}
}
int main()
{
int tag=0;
while(1)
{
tag++;
cin>>m>>n;
if(m==0 &&n==0)
{
break;
}
memset(mp,0,sizeof(mp));
memset(da,0,sizeof(da));
memset(vis,0,sizeof(vis));
memset(hs,0,sizeof(hs));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>mp[i][j];
}
}
/*
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<mp[i][j];
}
cout<<endl;
}*/
flag=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if((mp[i][j]=='*'||mp[i][j]=='X')&&(vis[i][j]==0))
{
flag++;
dfs1(i,j);
}
if(mp[i][j]=='.')
{
da[i][j]=0;
}
}
}
//memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(da[i][j]!=0)
{
hs[da[i][j]]++;
dfs2(i,j);
}
}
}
vector<int> jg;
for(int i=1;i<=flag;i++)
{
jg.push_back(hs[i]);
}
sort(jg.begin(),jg.end());
cout<<"Throw "<<tag<<endl;
for(int i=0;i<jg.size();i++)
{
cout<<jg[i]<<" ";
}
cout<<endl<<endl;
}
return 0;
}