/*pic保存图片信息 然后就是递归
难度不高
欢迎交流 欢迎指出可以改进的地方///
看不懂也可以留言啊~~~我编程习惯不太好改进空间很大。
下面是AC代码*/
#include<stdio.h>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstring>
using namespace std;
int n,cnt;
bool pic[65][65];
int mem[20000];
bool isblack(int r,int l,int u,int d){
for(int i=r;i<=l;i++){
for(int j=u;j<=d;j++){
if(pic[i][j]==true)return false;
}
}
return true; //white return true; true is white;
}
bool iswhite(int r,int l,int u,int d){
for(int i=r;i<=l;i++){
for(int j=u;j<=d;j++){
if(pic[i][j]==false)return false;
}
}
return true; //black return true; true is white;
}
void find(int r,int l,int u,int d,int value,int depth){
if(isblack(r,l,u,d)){
mem[cnt++]=value;
return;
}
else if(iswhite(r,l,u,d)){
return;
}
else if(r==l)return;
else{
find(r,r+(l-r)/2,u,u+(d-u)/2,value+1*pow(5,depth),depth+1);
find(r+(l-r)/2+1,l,u,u+(d-u)/2,value+2*pow(5,depth),depth+1);
find(r,r+(l-r)/2,u+(d-u)/2+1,d,value+3*pow(5,depth),depth+1);
find(r+(l-r)/2+1,l,u+(d-u)/2+1,d,value+4*pow(5,depth),depth+1);
}
}
void outpic(int r,int l,int u,int d){
for(int i=r;i<=l;i++){
for(int j=u;j<=d;j++){
if(pic[i][j])cout<<".";
else cout<<"*";
}
cout<<"\n";
}
}
void paint(int r, int l, int u, int d){
for(int i=r;i<=l;i++){
for(int j=u;j<=d;j++){
pic[j][i]=false;
}
}
}
void in(int a){
int r=0,l=-n-1,u=0,d=-n-1;
int r1,l1,d1,u1;
while(a!=0){
int k;
k=a%5;
a/=5;
if(k==1){
r1=r;
l1=r+(l-r)/2;
u1=u;
d1=u+(d-u)/2;
}
else if(k==2){
r1=r+(l-r)/2+1;
l1=l;
u1=u;
d1=u+(d-u)/2;
}
else if(k==3){
r1=r;
l1=r+(l-r)/2;
u1=u+(d-u)/2+1;
d1=d;
}
else if(k==4){
r1=r+(l-r)/2+1;
l1=l;
u1=u+(d-u)/2+1;
d1=d;
}
r=r1;
l=l1;
u=u1;
d=d1;
}
paint(r,l,u,d);
}
int main(){
int count=1;
//freopen("t.in","r",stdin);
//freopen("t.out","w",stdout);
while(cin>>n&&n!=0){
memset(pic,true,sizeof(pic));
memset(mem,0,sizeof(mem));
if(count!=1)cout<<"\n";
cout<<"Image "<<count++<<endl;
if(n>0){
cnt=0;
int j=0;
int i=0;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
char tem;
cin>>tem;
pic[j][i]=!(tem-48);
}
}
//outpic(0,n-1,0,n-1);
find(0,n-1,0,n-1,0,0);
sort(mem,mem+cnt);
if(cnt){
for(int k=0;k<cnt;k++){
if(k&&k%12==0)cout<<"\n"<<mem[k];
else{
if(k)cout<<" "<<mem[k];
else cout<<mem[k];
}
}
cout<<"\n";
}
cout<<"Total number of black nodes = "<<cnt<<endl;
}
else{
int getin;
while(cin>>getin&&getin!=-1){
in(getin);
}
outpic(0,-n-1,0,-n-1);
}
}
return 0;
}