#include <stdio.h>
#include <string>
#include <string.h>
#include <iostream>
using namespace std;
#define maxn 100
#define BLACK '*'
struct cell_data
{
    int num;
    
    int p;
    int q;
    
    bool across;
    
    bool down;
};
int main()
{
    int n, m, kcase = 0;
    while (scanf("%d",&n) == 1 && n != 0)
    {
        scanf("%d",&m);
        char a[n][m];
        kcase++;
        
        if (kcase > 1)
        {
            printf("\n");
        }
        for (int i = 0; i < n; i++)
        {
            char ch = getchar();
            string str = "", s = "";
            while (ch == '\n')
            {
                ch = getchar();
            }
            str = ch;
            getline(cin, s, '\n');
            str += s;
            for (int j = 0; j < m; j++)
            {
                a[i][j] = str[j];
            }
        }
        
        cell_data cdata[maxn];
        for (int i = 0; i < maxn; i++)
        {
            cdata[i].num = -1;
        }
        
        int num = 0;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                
                bool flag = false;
                
                if (i == 0 && (a[i][j] != BLACK))
                {
                    cdata[num].down = true;
                    flag = true;
                }
                else if (a[i - 1][j] == BLACK && (a[i][j] != BLACK))
                {
                    cdata[num].down = true;
                    flag = true;
                }
                
                if (j == 0 && (a[i][j] != BLACK))
                {
                    cdata[num].across = true;
                    flag = true;
                }
                else if (a[i][j - 1] == BLACK && (a[i][j] != BLACK))
                {
                    cdata[num].across = true;
                    flag = true;
                }
                
                if (flag)
                {
                    cdata[num].num = num + 1;
                    cdata[num].p = i;
                    cdata[num].q = j;
                    num++;
                }
            }
        }
        printf("puzzle #%d:\n", kcase);
        printf("Across\n");
        for (int i = 0; cdata[i].num != -1; i++)
        {
            if (cdata[i].across)
            {
                int p = cdata[i].p;
                int q = cdata[i].q;
                printf("%3d.", cdata[i].num);
                while (q < m && (a[p][q] != '*'))
                {
                    printf("%c", a[p][q]);
                    q++;
                }
                printf("\n");
            }
        }
        printf("Down\n");
        for (int i = 0; cdata[i].num != -1; i++)
        {
            if (cdata[i].down)
            {
                int p = cdata[i].p;
                int q = cdata[i].q;
                printf("%3d.", cdata[i].num);
                while (p < n && (a[p][q] != '*'))
                {
                    printf("%c", a[p][q]);
                    p++;
                }
                printf("\n");
            }
        }
    }
    return 0;
}