//#define Local
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
pair<char,int> a[100][100];
int main()
{
#ifdef Local
freopen("data.in", "r", stdin);
#endif
int n, m, i, l, kk = 1;
while (1)
{
int t = 1;
int k = 2;
scanf("%d", &n);
if (!n) return 0;
scanf("%d", &m);
for (i = 0; i < n; i++)
{
for (l = 0; l < m; l++)
{
if (l == 0)
{
scanf("\n%c", &a[i][l].first);
if (a[i][l].first != '*'&&(i==0||l==0||a[i-1][l].first=='*'||a[i][l-1].first=='*')) a[i][l].second = t++;
}
else
{
scanf("%c", &a[i][l].first);
if (a[i][l].first != '*' && (i == 0 || l == 0 || a[i - 1][l].first == '*' || a[i][l - 1].first == '*')) a[i][l].second = t++;
}
}
}
if (kk != 1) printf("\n");
printf("puzzle #%d:\n", kk);
printf("Across\n");
for (i = 0; i < n; i++)
{
int c = 1;
for (l = 0; l < m; l++)
{
if (c == 1 && a[i][l].first != '*')
{
if (k == 2)
{
k--;
}
else
{
printf("\n");
}
printf("%3d.%c", a[i][l].second,a[i][l].first);
c = 0;
}
else if (a[i][l].first != '*')
{
printf("%c", a[i][l].first);
}
else
{
c = 1;
}
}
}
printf("\nDown\n");
for (i = 0; i < n; i++)
{
int c = 1;
for (l = 0; l < m; l++)
{
if (a[i][l].first != '*' && (i == 0 || a[i - 1][l].first == '*'))
{
if (k == 1) k--;
else printf("\n");
printf("%3d.", a[i][l].second);
for (int f = i; f < n; f++)
{
if (a[f][l].first != '*') printf("%c", a[f][l].first);
else
break;
}
}
}
}
printf("\n");
int num = 1;
kk++;
}
return 0;
}