#include<iostream>
#include<cstdio>
#include<vector>
#include<stack>
#include<algorithm>
#include<queue>
#define gc getchar
#define ll long long
//typedef unsigned long long int uint;
//typedef long long int64;
//typedef unsigned long long uint64;
using namespace std;
struct node
{
vector<int> neb;
int dist;
int nn;
int val;
int col;
int ans;
} ar[100001];
int arr[190][190];
int arr1[190][190];
void connect(int a,int b,int i,int j)
{
ar[a].neb.push_back(b);
ar[b].neb.push_back(a);
ar[a].nn++;
ar[b].nn++;
ar[a].val=arr[i][j];
}
vector<int> one;
void bfs(int v,int k)
{
queue<int> myqueue;
for(int i=1;i<=k;i++)
{
if(i!=v)
{
ar[i].col=1;
ar[i].dist=0;
}
}
ar[v].col=2;
ar[v].dist=0;
myqueue.push(v);
int min=0;
bool fi=true;
while(!myqueue.empty())
{
int curr=myqueue.front();
myqueue.pop();
//cout << curr << " " << ar[curr].dist << endl;
for(int i=0;i<ar[curr].nn;i++)
{
//cout << ar[curr].neb[i]<< " ";
if(ar[ar[curr].neb[i]].col==1 && (ar[ar[curr].neb[i]].val)==1)
{
ar[ar[curr].neb[i]].dist=0;
ar[ar[curr].neb[i]].col=2;
myqueue.push(ar[curr].neb[i]);
}
else if(ar[ar[curr].neb[i]].val==0 && ar[ar[curr].neb[i]].dist==0)
{
ar[ar[curr].neb[i]].dist=ar[curr].dist + 1;
myqueue.push(ar[curr].neb[i]);
}
else if((ar[curr].dist+1) < ar[ar[curr].neb[i]].dist)
{
ar[ar[curr].neb[i]].dist=ar[curr].dist + 1;
myqueue.push(ar[curr].neb[i]);
}
//}
}
//cout << endl;
ar[curr].col=3;
}
}
int main()
{
int t;
cin >> t;
while(t-->0)
{
int n,m;
cin >> n >> m;
int k=0;
string str[n+1];
for(int i=1;i<=n;i++)
{
cin >> str[i];
}
int g;
bool check=true;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
k++;
if(str[i].at(j-1)=='0')
arr[i][j]=0;
else
{
arr[i][j]=1;
if(check)
g=k;
check=false;
}
arr1[i][j]=k;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(j==m && i!=n)
{
connect(arr1[i][j],arr1[i+1][j],i,j);
}
else if(j==m && i==n)
{
if(arr[i][j]==1)
ar[k].val=1;
else
ar[k].val=0;
}
else if(i==n)
{
connect(arr1[i][j],arr1[i][j+1],i,j);
}
else
{
connect(arr1[i][j],arr1[i][j+1],i,j);
connect(arr1[i][j],arr1[i+1][j],i,j);
}
}
}
bfs(g,k);
k=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
k++;
cout << ar[k].dist << " " ;
}
cout << endl;
}
}
//cout << ar[1].nn << endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxzdGFjaz4KI2luY2x1ZGU8YWxnb3JpdGhtPgojaW5jbHVkZTxxdWV1ZT4KI2RlZmluZSBnYyBnZXRjaGFyCiNkZWZpbmUgbGwgbG9uZyBsb25nCiAKIAovL3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50OwovL3R5cGVkZWYgbG9uZyBsb25nIGludDY0OwovL3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NDsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RydWN0IG5vZGUKewogCiAgICB2ZWN0b3I8aW50PiBuZWI7CiAgICBpbnQgZGlzdDsKICAgIGludCBubjsKICAgIGludCB2YWw7CiAgICBpbnQgY29sOwogICAgaW50IGFuczsKfSBhclsxMDAwMDFdOwogaW50IGFyclsxOTBdWzE5MF07CiBpbnQgYXJyMVsxOTBdWzE5MF07CnZvaWQgY29ubmVjdChpbnQgYSxpbnQgYixpbnQgaSxpbnQgaikKewogICAgYXJbYV0ubmViLnB1c2hfYmFjayhiKTsKICAgIGFyW2JdLm5lYi5wdXNoX2JhY2soYSk7CiAgICBhclthXS5ubisrOwogICAgYXJbYl0ubm4rKzsKICAgIGFyW2FdLnZhbD1hcnJbaV1bal07Cn0KdmVjdG9yPGludD4gb25lOwp2b2lkIGJmcyhpbnQgdixpbnQgaykKewogICBxdWV1ZTxpbnQ+IG15cXVldWU7CiAgIGZvcihpbnQgaT0xO2k8PWs7aSsrKQogICB7CiAgIAlpZihpIT12KQogICAJewogICAJYXJbaV0uY29sPTE7CiAgIAlhcltpXS5kaXN0PTA7CiAgIAl9CiAgIH0JCiAgYXJbdl0uY29sPTI7CiAgYXJbdl0uZGlzdD0wOwogIG15cXVldWUucHVzaCh2KTsKICBpbnQgbWluPTA7CiAgYm9vbCBmaT10cnVlOwogIHdoaWxlKCFteXF1ZXVlLmVtcHR5KCkpCiAgewogIAlpbnQgY3Vycj1teXF1ZXVlLmZyb250KCk7CiAgCW15cXVldWUucG9wKCk7CiAgCS8vY291dCA8PCBjdXJyIDw8ICIgIiA8PCBhcltjdXJyXS5kaXN0IDw8IGVuZGw7CiAgCQogIAlmb3IoaW50IGk9MDtpPGFyW2N1cnJdLm5uO2krKykKICAJewogIAkJLy9jb3V0IDw8IGFyW2N1cnJdLm5lYltpXTw8ICIgIjsKICAJIAlpZihhclthcltjdXJyXS5uZWJbaV1dLmNvbD09MSAmJiAoYXJbYXJbY3Vycl0ubmViW2ldXS52YWwpPT0xKQogIAkgCSAgewogIAkgCSAgICAgIGFyW2FyW2N1cnJdLm5lYltpXV0uZGlzdD0wOwogIAkgCSAgICAgIGFyW2FyW2N1cnJdLm5lYltpXV0uY29sPTI7CiAgCSAJICAgICAgbXlxdWV1ZS5wdXNoKGFyW2N1cnJdLm5lYltpXSk7CiAgCSAJICB9CiAgCSAgICBlbHNlIGlmKGFyW2FyW2N1cnJdLm5lYltpXV0udmFsPT0wICYmIGFyW2FyW2N1cnJdLm5lYltpXV0uZGlzdD09MCkKICAJICAgICAgewogIAkgICAgICAJYXJbYXJbY3Vycl0ubmViW2ldXS5kaXN0PWFyW2N1cnJdLmRpc3QgKyAxOwogIAkgICAgICAJbXlxdWV1ZS5wdXNoKGFyW2N1cnJdLm5lYltpXSk7CiAgCSAgICAgIH0KICAJICAgICBlbHNlIGlmKChhcltjdXJyXS5kaXN0KzEpIDwgYXJbYXJbY3Vycl0ubmViW2ldXS5kaXN0KSAKICAJICAgIHsKICAJICAgICAgYXJbYXJbY3Vycl0ubmViW2ldXS5kaXN0PWFyW2N1cnJdLmRpc3QgKyAxOwogIAkgICAgIG15cXVldWUucHVzaChhcltjdXJyXS5uZWJbaV0pOwogIAkgICAgfQogIAkgICAgLy99CiAgCX0KICAJLy9jb3V0IDw8IGVuZGw7CiAgCWFyW2N1cnJdLmNvbD0zOwogIH0KCn0KaW50IG1haW4oKQp7CglpbnQgdDsKCWNpbiA+PiB0OwoJd2hpbGUodC0tPjApCgl7CgkgIGludCBuLG07CgkgIGNpbiA+PiBuID4+IG07CgkgIGludCBrPTA7CgkgIHN0cmluZyBzdHJbbisxXTsKCSAgZm9yKGludCBpPTE7aTw9bjtpKyspCgkgICAgIHsKCSAgICAgCSBjaW4gPj4gc3RyW2ldOwoJICAgICB9CgkgICAgIGludCBnOwoJICAgICBib29sIGNoZWNrPXRydWU7CgkgIGZvcihpbnQgaT0xO2k8PW47aSsrKQoJICAgICB7CgkgICAgIAlmb3IoaW50IGo9MTtqPD1tO2orKykKCSAgICAgCXsKCSAgICAgCQlrKys7CgkgICAgIAkJaWYoc3RyW2ldLmF0KGotMSk9PScwJykKCSAgICAgCQlhcnJbaV1bal09MDsKCSAgICAgCQllbHNlCgkgICAgIAkJewoJICAgICAJCWFycltpXVtqXT0xOwoJICAgICAJCWlmKGNoZWNrKQoJICAgICAJCSAgIGc9azsKCSAgICAgCQkgIGNoZWNrPWZhbHNlOwoJICAgICAJCX0KCSAgICAgCQlhcnIxW2ldW2pdPWs7CgkgICAgIAkJfQoJICAgICB9CgkgICAgIAoJICBmb3IoaW50IGk9MTtpPD1uO2krKykKCSAgICB7CgkgICAgCWZvcihpbnQgaj0xO2o8PW07aisrKQoJICAgICAgICAgICB7CgkgICAgICAgICAgIAkKCSAgICAgICAgICAgCWlmKGo9PW0gJiYgaSE9bikKCSAgICAgICAgICAgCXsKCSAgICAgICAgICAgCQljb25uZWN0KGFycjFbaV1bal0sYXJyMVtpKzFdW2pdLGksaik7CgkgICAgICAgICAgIAl9CgkgICAgICAgICAgIAllbHNlIGlmKGo9PW0gJiYgaT09bikKCSAgICAgICAgICAgCXsKCSAgICAgICAgICAgCQlpZihhcnJbaV1bal09PTEpCgkgICAgICAgICAgIAkJYXJba10udmFsPTE7CgkgICAgICAgICAgIAkJZWxzZQoJICAgICAgICAgICAJCWFyW2tdLnZhbD0wOwoJICAgICAgICAgICAJfQoJICAgICAgICAgICAJZWxzZSBpZihpPT1uKQoJICAgICAgICAgICAJewoJICAgICAgICAgICAJCWNvbm5lY3QoYXJyMVtpXVtqXSxhcnIxW2ldW2orMV0saSxqKTsKCSAgICAgICAgICAgCX0KCSAgICAgICAgICAgCWVsc2UKCSAgICAgICAgICAgCXsKCSAgICAgICAgICAgCWNvbm5lY3QoYXJyMVtpXVtqXSxhcnIxW2ldW2orMV0saSxqKTsKCSAgICAgICAgICAgCWNvbm5lY3QoYXJyMVtpXVtqXSxhcnIxW2krMV1bal0saSxqKTsKCSAgICAgICAgICAgCX0KCSAgICAgICAgICB9CgkgICAgfQoJICAgIGJmcyhnLGspOwoJICAgIGs9MDsKCSAgIGZvcihpbnQgaT0xO2k8PW47aSsrKQoJICAgICB7CgkgICAgIAlmb3IoaW50IGo9MTtqPD1tO2orKykKCSAgICAgCXsKCSAgICAgCQlrKys7CgkgICAgICAgICAgICBjb3V0IDw8IGFyW2tdLmRpc3QgPDwgIiAiICA7CgkgICAgICAgICB9CgkgICAgIGNvdXQgPDwgZW5kbDsKCSAgICAgfQoJfQoJLy9jb3V0IDw8IGFyWzFdLm5uIDw8IGVuZGw7CnJldHVybiAwOwkKfQ==