#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f(i, x, n) for(int i = x; i < (int)(n); ++i)
int n, m, an[1000][1000], y[1000];
char mp[1000][1001];
deque<pair<pair<int, int>, pair<int, int> > > q;
void up(int r){
q.clear();
f(j, 0, m){
if (mp[r][j] == '1')y[j] = r;
if (y[j] != -1){
int g = y[j] - r;
g *= g;
while (!q.empty()){
int z = j - q.back().first.second;
if (g <= q.back().first.first + z * z) { q.pop_back(); continue; }
int d = g - (q.back().first.first + z * z);
z <<= 1;
int ntr = (d + z - 1) / z;
int nw = j + ntr;
if (nw == j || q.back().second.first >= nw) { q.pop_back(); continue; }
q.back().second.second = nw;
q.push_back(make_pair(make_pair(g, j), make_pair(nw, 1e9)));
break;
}
if (q.empty())q.push_back(make_pair(make_pair(g, j), make_pair(-1, 1e9)));
}
if (!q.empty()){
while (q.front().second.second <= j)q.pop_front();
int d = j - q.front().first.second;
an[r][j] = min(an[r][j], d * d + q.front().first.first);
}
}
}
int main() {
scanf("%d%d", &n, &m);
f(i, 0, n)scanf("%s", mp[i]);
f(i, 0, n)f(j, 0, m)an[i][j] = mp[i][j] == '1' ? 0 : 1e9;
f(i, 0, 2){
f(i, 0, m)y[i] = -1;
f(i, 0, n)up(i);
f(i, 0, m)y[i] = -1;
for (int i = n - 1; i >= 0; --i)up(i);
f(i, 0, n)reverse(mp[i], mp[i] + m);
f(i, 0, n)reverse(an[i], an[i] + m);
}
f(i, 0, n){
printf("%d", an[i][0]);
f(j, 1, m)printf(" %d", an[i][j]);
printf("\n");
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBmKGksIHgsIG4pIGZvcihpbnQgaSA9IHg7IGkgPCAoaW50KShuKTsgKytpKQoKaW50IG4sIG0sIGFuWzEwMDBdWzEwMDBdLCB5WzEwMDBdOwpjaGFyIG1wWzEwMDBdWzEwMDFdOwpkZXF1ZTxwYWlyPHBhaXI8aW50LCBpbnQ+LCBwYWlyPGludCwgaW50PiA+ID4gcTsKCnZvaWQgdXAoaW50IHIpewoJcS5jbGVhcigpOwoJZihqLCAwLCBtKXsKCQlpZiAobXBbcl1bal0gPT0gJzEnKXlbal0gPSByOwoJCWlmICh5W2pdICE9IC0xKXsKCQkJaW50IGcgPSB5W2pdIC0gcjsKCQkJZyAqPSBnOwoJCQl3aGlsZSAoIXEuZW1wdHkoKSl7CgkJCQlpbnQgeiA9IGogLSBxLmJhY2soKS5maXJzdC5zZWNvbmQ7CgkJCQlpZiAoZyA8PSBxLmJhY2soKS5maXJzdC5maXJzdCArIHogKiB6KSB7IHEucG9wX2JhY2soKTsgY29udGludWU7IH0KCQkJCWludCBkID0gZyAtIChxLmJhY2soKS5maXJzdC5maXJzdCArIHogKiB6KTsKCQkJCXogPDw9IDE7CgkJCQlpbnQgbnRyID0gKGQgKyB6IC0gMSkgLyB6OwoJCQkJaW50IG53ID0gaiArIG50cjsKCQkJCWlmIChudyA9PSBqIHx8IHEuYmFjaygpLnNlY29uZC5maXJzdCA+PSBudykgeyBxLnBvcF9iYWNrKCk7IGNvbnRpbnVlOyB9CgkJCQlxLmJhY2soKS5zZWNvbmQuc2Vjb25kID0gbnc7CgkJCQlxLnB1c2hfYmFjayhtYWtlX3BhaXIobWFrZV9wYWlyKGcsIGopLCBtYWtlX3BhaXIobncsIDFlOSkpKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWlmIChxLmVtcHR5KCkpcS5wdXNoX2JhY2sobWFrZV9wYWlyKG1ha2VfcGFpcihnLCBqKSwgbWFrZV9wYWlyKC0xLCAxZTkpKSk7CgkJfQoJCWlmICghcS5lbXB0eSgpKXsKCQkJd2hpbGUgKHEuZnJvbnQoKS5zZWNvbmQuc2Vjb25kIDw9IGopcS5wb3BfZnJvbnQoKTsKCQkJaW50IGQgPSBqIC0gcS5mcm9udCgpLmZpcnN0LnNlY29uZDsKCQkJYW5bcl1bal0gPSBtaW4oYW5bcl1bal0sIGQgKiBkICsgcS5mcm9udCgpLmZpcnN0LmZpcnN0KTsKCQl9Cgl9Cn0KCmludCBtYWluKCkgewoJc2NhbmYoIiVkJWQiLCAmbiwgJm0pOwoJZihpLCAwLCBuKXNjYW5mKCIlcyIsIG1wW2ldKTsKCWYoaSwgMCwgbilmKGosIDAsIG0pYW5baV1bal0gPSBtcFtpXVtqXSA9PSAnMScgPyAwIDogMWU5OwoJZihpLCAwLCAyKXsKCQlmKGksIDAsIG0peVtpXSA9IC0xOwoJCWYoaSwgMCwgbil1cChpKTsKCQlmKGksIDAsIG0peVtpXSA9IC0xOwoJCWZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpdXAoaSk7CgkJZihpLCAwLCBuKXJldmVyc2UobXBbaV0sIG1wW2ldICsgbSk7CgkJZihpLCAwLCBuKXJldmVyc2UoYW5baV0sIGFuW2ldICsgbSk7Cgl9CglmKGksIDAsIG4pewoJCXByaW50ZigiJWQiLCBhbltpXVswXSk7CgkJZihqLCAxLCBtKXByaW50ZigiICVkIiwgYW5baV1bal0pOwoJCXByaW50ZigiXG4iKTsKCX0KfQ==