using namespace std;
struct node{
int x,y;
};
int a[50][50],n,dx[]={-1,0,1,0},dy[]={0,1,0,-1};
bool st[50][50];
int bfs(int sx,int sy){
int v=0,h[1600],f[1600];
bool flag=0;
st[sx][sy]=1;
node s;
queue<node> q;
s.x=sx; s.y=sy;
q.push(s);
while(!q.empty()){
node t=q.front();
q.pop();
for(int i=1;i<=3;i++){
node u;
u.x=t.x+dx[i]; u.y=t.y+dy[i];
if(st[u.x][u.y]==1||a[u.x][u.y]==1) continue;
if(u.x>n||u.x<1||u.y>n||u.y<1){
flag=1;
return 0;
}
v++,h[v]=u.x,f[v]=u.y;
st[u.x][u.y]=1;
q.push(u);
}
}
if(flag==0){
a[sx][sy]=2;
for(int i=1;i<=v;i++) a[h[i]][f[i]]=2;
}
return 0;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
cin>>a[i][j];
if(a[i][j]==1) st[i][j]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(st[i][j]==0) bfs(i,j);
}
}
cout<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}