#include using namespace std; int main() { char grid[15][15]; int a, b, i, j, k, t = 0, n[15][15]; while (scanf("%d", &a) && a != 0) { scanf("%d", &b); getchar(); for (i = 0; i < a; i++) gets(grid[i]); k = 0; memset(n, 0, sizeof(n)); for (i = 0; i < a; i++) for (j = 0; j < b; j++) { if (i == 0 && grid[i][j] != '*') n[i][j] = ++k; else if (j == 0 && grid[i][j] != '*') n[i][j] = ++k; else if (grid[i][j - 1] == '*' && grid[i][j] != '*') n[i][j] = ++k; else if (grid[i - 1][j] == '*' && grid[i][j] != '*') n[i][j] = ++k; } if (t) putchar('\n'); printf("puzzle #%d:\nAcross\n", ++t); for (i = 0; i < a; i++) for (j = 0; j < b; j++) { if (n[i][j] && (j == 0 || grid[i][j - 1] == '*')) { printf("%3d.", n[i][j]); for (k = j; k < b && grid[i][k] != '*'; k++) putchar(grid[i][k]); putchar('\n'); } } printf("Down\n"); for (i = 0; i < a; i++) for (j = 0; j < b; j++) { if (n[i][j] && (i == 0 || grid[i - 1][j] == '*')) { printf("%3d.", n[i][j]); for (k = i; k < a && grid[k][j] != '*'; k++) putchar(grid[k][j]); putchar('\n'); } } } return 0; } /* 2 2 AT *O 6 7 AIM*DEN *ME*ONE UPON*TO SO*ERIN *SA*OR* IES*DEA 1 1 **/