#include<bits/stdc++.h>
#define ll long long
#define endl "\n"
#define F first
#define S second
#define loop(a,n) for(int i=a; i<=n ; i++)
#define TIME (1.0 * clock() / CLOCKS_PER_SEC)
#define NAME "DUTHI"
using namespace std;
int m,n;
int a[105][105];
int res[105][105];
bool found = false;
int dx[] = {-1,1,0,0};
int dy[] = {0,0,-1,1};
bool val(int x,int y) {
return x>=1 && x<=m && y>=1 && y<=n;
}
int dem(int i,int j) {
int cnt=0;
for (int d=0;d<4;++d) {
int ni=i+dx[d];
int nj=j+dy[d];
if (val(ni,nj) && res[ni][nj]==1)
cnt++;
}
return cnt;
}
bool check() {
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
if (dem(i,j) != a[i][j])
return false;
return true;
}
void backtrack(int i,int j) {
if (found) return;
if (i==m+1) {
if (check()) {
found = true;
}
return;
}
int ni=i, nj=j+1;
if (nj==n+1) {
ni=i+1;
nj=1;
}
res[i][j]=0;
backtrack(ni,nj);
if (found) return;
res[i][j]=1;
backtrack(ni,nj);
if (found) return;
}
void nhap(){
cin>>m>>n;
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
cin >> a[i][j];
}
void solve(){
backtrack(1,1);
if (!found) cout<<0;
else {
cout<<1<<endl;
for(int i=1;i<=m;++i) {
for(int j=1;j<=n;++j)
cout<<res[i][j] << ' ';
cout<<endl;
}
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
freopen(NAME".INP","r",stdin);
freopen(NAME".OUT","w",stdout);
nhap();
solve();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBlbmRsICJcbiIKI2RlZmluZSBGIGZpcnN0CiNkZWZpbmUgUyBzZWNvbmQKI2RlZmluZSBsb29wKGEsbikgZm9yKGludCBpPWE7IGk8PW4gOyBpKyspCiNkZWZpbmUgVElNRSAoMS4wICogY2xvY2soKSAvIENMT0NLU19QRVJfU0VDKQojZGVmaW5lIE5BTUUgIkRVVEhJIgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG0sbjsKaW50IGFbMTA1XVsxMDVdOwppbnQgcmVzWzEwNV1bMTA1XTsKYm9vbCBmb3VuZCA9IGZhbHNlOwoKaW50IGR4W10gPSB7LTEsMSwwLDB9OwppbnQgZHlbXSA9IHswLDAsLTEsMX07Cgpib29sIHZhbChpbnQgeCxpbnQgeSkgewogICAgcmV0dXJuIHg+PTEgJiYgeDw9bSAmJiB5Pj0xICYmIHk8PW47Cn0KaW50IGRlbShpbnQgaSxpbnQgaikgewogICAgaW50IGNudD0wOwogICAgZm9yIChpbnQgZD0wO2Q8NDsrK2QpIHsKICAgICAgICBpbnQgbmk9aStkeFtkXTsKICAgICAgICBpbnQgbmo9aitkeVtkXTsKICAgICAgICBpZiAodmFsKG5pLG5qKSAmJiByZXNbbmldW25qXT09MSkKICAgICAgICAgICAgY250Kys7CiAgICB9CiAgICByZXR1cm4gY250Owp9CmJvb2wgY2hlY2soKSB7CiAgICBmb3IoaW50IGk9MTtpPD1tOysraSkKICAgICAgICBmb3IoaW50IGo9MTtqPD1uOysraikKICAgICAgICAgICAgaWYgKGRlbShpLGopICE9IGFbaV1bal0pCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKfQp2b2lkIGJhY2t0cmFjayhpbnQgaSxpbnQgaikgewogICAgaWYgKGZvdW5kKSByZXR1cm47CiAgICBpZiAoaT09bSsxKSB7CiAgICAgICAgaWYgKGNoZWNrKCkpIHsKICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbmk9aSwgbmo9aisxOwogICAgaWYgKG5qPT1uKzEpIHsKICAgICAgICBuaT1pKzE7CiAgICAgICAgbmo9MTsKICAgIH0KCiAgICByZXNbaV1bal09MDsKICAgIGJhY2t0cmFjayhuaSxuaik7CiAgICBpZiAoZm91bmQpIHJldHVybjsKICAgIHJlc1tpXVtqXT0xOwogICAgYmFja3RyYWNrKG5pLG5qKTsKICAgIGlmIChmb3VuZCkgcmV0dXJuOwp9CnZvaWQgbmhhcCgpewogICAgY2luPj5tPj5uOwogICAgZm9yKGludCBpPTE7aTw9bTsrK2kpCiAgICAgICAgZm9yKGludCBqPTE7ajw9bjsrK2opCiAgICAgICAgICAgIGNpbiA+PiBhW2ldW2pdOyAgICAKfQp2b2lkIHNvbHZlKCl7CiAgICBiYWNrdHJhY2soMSwxKTsKICAgIGlmICghZm91bmQpIGNvdXQ8PDA7CiAgICBlbHNlIHsKICAgICAgICBjb3V0PDwxPDxlbmRsOwogICAgICAgIGZvcihpbnQgaT0xO2k8PW07KytpKSB7CiAgICAgICAgICAgIGZvcihpbnQgaj0xO2o8PW47KytqKQogICAgICAgICAgICAgICAgY291dDw8cmVzW2ldW2pdIDw8ICcgJzsKICAgICAgICAgICAgY291dDw8ZW5kbDsKICAgICAgICB9CiAgICB9Cn0KaW50IG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApO2NvdXQudGllKDApOwogICAgZnJlb3BlbihOQU1FIi5JTlAiLCJyIixzdGRpbik7CiAgICBmcmVvcGVuKE5BTUUiLk9VVCIsInciLHN0ZG91dCk7CiAgICBuaGFwKCk7CiAgICBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0K