/*
1.因為輸入的兩個整數決定了這一次迴圈要接收的字元數,
所以可以通過判斷第一個數字是否為0來結束輸入。
2. 判斷是否標記數字。whitesquare的左邊或上邊若沒有whitesquare,則可以標上
3.列印時如何判斷一個標號是已經列印還是應該要從他列印起?
設定記號法不可取,因為across輸出會影響down輸入。
Across: 對於某一行,從第一個開始輸出,直到遇到邊界或者遇到黑格
Down:
如果這個whitesquare的上面不是whitesquare即可要以它為起始
*/
#include<stdio.h>
char words[10][10];
int def[10][10] = {0};
int main(){
int r,c;
int index=1;
// int defcount=1;
int firstcase=1;
while(scanf("%d",&r) && r!= 0){
scanf("%d",&c);
getchar(); //不可忽略
for(int i=0; i<r; i++){
for(int j=0; j<c; j++)
words[i][j] = getchar();
getchar();
}
//處理
int defcount = 1;
for(int i=0; i<c; i++){
if(words[0][i] != '*' )
def[0][i] = defcount++;
}
for(int i=1; i<r; i++){
for(int j=0; j<c; j++){
if(j==0){
if(words[i][j] != '*')
def[i][j] = defcount++;
}
else{
if( (words[i-1][j] == '*' || words[i][j-1] == '*')&&(words[i][j] != '*') )//也要求words[i][j]不能為'*'
def[i][j] =defcount++;
}
}
}
if(!firstcase)
printf("\n");
printf("puzzle #%d:\n",index++);
printf("Across\n");
//橫向輸出
for(int i=0; i<r; i++){
for(int j=0; j<c; ){
if(words[i][j] != '*'){
printf("%3d.",def[i][j]);
while(words[i][j] != '*'){
printf("%c",words[i][j]);
j++;
if(j == c)
break;
}
printf("\n");
}
else j++;
}
}
printf("Down\n");
for(int i=0; i<r; i++){
int idex=i;
for(int j=0; j<c; j++ ){
if ( (words[i][j] != '*' && i==0 )|| (i!= 0 && words[i-1][j] == '*' && words[i][j] != '*') )
{
printf("%3d.",def[i][j]);
while(words[i][j] != '*' && i<r){
printf("%c",words[i][j]);
i++;
}
printf("\n");
}
i = idex;
}
}
firstcase = 0;
}
return 0;
}