#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a[12][12],d[110][12];
int b[12][12];
int r,c,con=0;
while(~scanf("%d",&r))
{
memset(b,0,sizeof(b));
memset(d,0,sizeof(d));
if(r==0)
break;
con++;
scanf("%d",&c);
int x=0;
for(int i=0; i<r; i++)
scanf("%s%*c",a[i]);
for(int i=0; i<r; i++)
for(int j=0; j<c; j++)
{
if(a[i][j]!='*')
{
if(i-1<0||j-1<0||b[i-1][j]==-1||b[i][j-1]==-1)
b[i][j]=++x;
}
else
b[i][j]=-1;
}
for(int i=0; i<r; i++)
{
for(int j=0; j<c; j++)
{
printf("%d ",b[i][j]);
}
printf("\n");
}
if(con>1)
printf("\n");
printf("puzzle #%d:\n",con);
int flag=0;
printf("Across\n");
for(int i=0; i<r; i++)
{
for(int j=0; j<c; j++)
{
if((j-1<0||b[i][j-1]==-1)&&b[i][j]>0)
{
if(b[i][j]>1)
printf("\n");
printf("%3d.",b[i][j]);
flag=1;
}
if(flag)
{ if(a[i][j]!='*')
printf("%c",a[i][j]);
}
}
flag=0;
}
printf("\n");
flag=0;
int p=0,q=0;
printf("Down\n");
for(int i=0; i<c; i++)
{
for(int j=0; j<r; j++)
{
if((j-1<0||b[j-1][i]==-1)&&b[j][i]!=-1)
{ d[p][q]='\0';
p=b[j][i];
flag=1;
q=0;
}
if(flag)
{ if(a[j][i]!='*')
d[p][q++]=a[j][i];
}
}
flag=0;
}
for(int i=0;i<=x;i++)
if(d[i][0])
printf("%3d.%s\n",i,d[i]);
}
return 0;
}