#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <cstring>
using namespace std;
//英语 看博友程序 抄博友程序 模拟
char a1[20][20];
char a2[20][20];
int da[20][20];
struct nod{
string s;
int id;
nod(string a,int b)
{
s=a;
id=b;
}
};
int main()
{
int tag=0;
int n,m;
while(1)
{
tag++;
cin>>n;
if(n==0)
{
break;
}
cin>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a1[i][j];
a2[i][j]=a1[i][j];
}
}
/*
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<a1[i][j]<<" ";
}
cout<<endl;
}*/
int js=1;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a1[i][j]!='*')
if((i==0 ||j==0)||((a1[i-1][j]=='*'&&(i-1)>=0) ||(a1[i][j-1]=='*'&& (j-1)>=0)))
{
da[i][j]=js++;
}
}
}
/*
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<da[i][j]<<" ";
}
cout<<endl;
}*/
vector<nod> ve1;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a1[i][j]!='*')
{
int k=j;
string s="";
while(a1[i][k]!='*'&& k<m)
{
s+=a1[i][k];
a1[i][k]='*';
k++;
}
//cout<<s<<" "<<da[i][j]<<endl;
ve1.push_back(nod(s,da[i][j]));//(nod){s,da[i][j]} CE
}
}
}
vector<nod> ve2;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a2[i][j]!='*')
{
int k=i;
string s="";
while(a2[k][j]!='*'&& k<n)
{
s+=a2[k][j];
a2[k][j]='*';
k++;
}
ve2.push_back(nod(s,da[i][j]));//(nod){s,da[i][j]} CE
}
}
}
printf("puzzle #%d:\n",tag);
printf("Across\n");
for(int i=0;i<ve1.size();i++)
{
printf("%3d.%s\n",ve1[i].id,ve1[i].s.c_str());
}
printf("Down\n");
for(int i=0;i<ve2.size();i++)
{
printf("%3d.%s\n",ve2[i].id,ve2[i].s.c_str());
}
printf("\n");
}
return 0;
}