#include<cstdio>
#include<algorithm>
#include<climits>
#include<queue>
#include<utility>
using namespace std;
void bfs(queue<pair<int,int> >& bfsQue, int (&dist)[182][182],bool (&color)[182][182], int n, int m) {
pair<int,int> temp;
int x,y;
while(!bfsQue.empty()) {
x=bfsQue.front().first;
y=bfsQue.front().second;
bfsQue.pop();
if((x+1<m)&&(color[x+1][y]==1)) {
temp.first=x+1;
temp.second=y;
bfsQue.push(temp);
color[x+1][y]=0;
dist[x+1][y]=dist[x][y]+1;
}
if((x-1>=0)&&(color[x-1][y]==1)) {
temp.first=x-1;
temp.second=y;
bfsQue.push(temp);
color[x-1][y]=0;
dist[x-1][y]=dist[x][y]+1;
}
if((y+1<m)&&(color[x][y+1]==1)) {
temp.first=x;
temp.second=y+1;
bfsQue.push(temp);
color[x][y+1]=0;
dist[x][y+1]=dist[x][y]+1;
}
if((y-1>=0)&&(color[x][y-1]==1)) {
temp.first=x;
temp.second=y-1;
bfsQue.push(temp);
color[x][y-1]=0;
dist[x][y-1]=dist[x][y]+1;
}
}
}
int main() {
int n,m,nTest,sz;
char ch,str[183];
int dist[182][182];
bool color[182][182];
pair<int,int> temp;
queue<pair<int,int> > bfsQue;
scanf("%d",&nTest);
for(int i=0;i<nTest;i++) {
scanf("%d%d",&n,&m);
for(int j=0;j<n;j++) {
scanf("%s",str);
for(int k=0;k<m;k++) {
ch=str[k]-48;
if(!ch) {
dist[j][k]=INT_MAX;
color[j][k]=1;
}
else {
dist[j][k]=0;
color[j][k]=0;
temp.first=j;
temp.second=k;
bfsQue.push(temp);
}
}
}
bfs(bfsQue,dist,color,n,m);
for(int j=0;j<n;j++) {
for(int k=0;k<m;k++) {
printf("%d",dist[j][k]);
if(k!=(m-1))
printf(" ");
}
printf("\n");
}
}
return 0;
}
I2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGNsaW1pdHM+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTx1dGlsaXR5PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgYmZzKHF1ZXVlPHBhaXI8aW50LGludD4gPiYgYmZzUXVlLCBpbnQgKCZkaXN0KVsxODJdWzE4Ml0sYm9vbCAoJmNvbG9yKVsxODJdWzE4Ml0sIGludCBuLCBpbnQgbSkgewogIHBhaXI8aW50LGludD4gdGVtcDsKICBpbnQgeCx5OwogIHdoaWxlKCFiZnNRdWUuZW1wdHkoKSkgewogICAgeD1iZnNRdWUuZnJvbnQoKS5maXJzdDsKICAgIHk9YmZzUXVlLmZyb250KCkuc2Vjb25kOwogICAgYmZzUXVlLnBvcCgpOwogICAgaWYoKHgrMTxtKSYmKGNvbG9yW3grMV1beV09PTEpKSB7CiAgICAgIHRlbXAuZmlyc3Q9eCsxOwogICAgICB0ZW1wLnNlY29uZD15OwogICAgICBiZnNRdWUucHVzaCh0ZW1wKTsKICAgICAgY29sb3JbeCsxXVt5XT0wOwogICAgICBkaXN0W3grMV1beV09ZGlzdFt4XVt5XSsxOwogICAgfQoKICAgIGlmKCh4LTE+PTApJiYoY29sb3JbeC0xXVt5XT09MSkpIHsKICAgICAgdGVtcC5maXJzdD14LTE7CiAgICAgIHRlbXAuc2Vjb25kPXk7CiAgICAgIGJmc1F1ZS5wdXNoKHRlbXApOwogICAgICBjb2xvclt4LTFdW3ldPTA7CiAgICAgIGRpc3RbeC0xXVt5XT1kaXN0W3hdW3ldKzE7CiAgICB9CgogICAgaWYoKHkrMTxtKSYmKGNvbG9yW3hdW3krMV09PTEpKSB7CiAgICAgIHRlbXAuZmlyc3Q9eDsKICAgICAgdGVtcC5zZWNvbmQ9eSsxOwogICAgICBiZnNRdWUucHVzaCh0ZW1wKTsKICAgICAgY29sb3JbeF1beSsxXT0wOwogICAgICBkaXN0W3hdW3krMV09ZGlzdFt4XVt5XSsxOwogICAgfQoKICAgIGlmKCh5LTE+PTApJiYoY29sb3JbeF1beS0xXT09MSkpIHsKICAgICAgdGVtcC5maXJzdD14OwogICAgICB0ZW1wLnNlY29uZD15LTE7CiAgICAgIGJmc1F1ZS5wdXNoKHRlbXApOwogICAgICBjb2xvclt4XVt5LTFdPTA7CiAgICAgIGRpc3RbeF1beS0xXT1kaXN0W3hdW3ldKzE7ICAgICAgIAogICAgfQogIH0KfQoKaW50IG1haW4oKSB7CiAgaW50IG4sbSxuVGVzdCxzejsKICBjaGFyIGNoLHN0clsxODNdOwogIGludCBkaXN0WzE4Ml1bMTgyXTsKICBib29sIGNvbG9yWzE4Ml1bMTgyXTsKCiAgcGFpcjxpbnQsaW50PiB0ZW1wOwogIHF1ZXVlPHBhaXI8aW50LGludD4gPiBiZnNRdWU7CgogIHNjYW5mKCIlZCIsJm5UZXN0KTsKCiAgZm9yKGludCBpPTA7aTxuVGVzdDtpKyspIHsKICAgIHNjYW5mKCIlZCVkIiwmbiwmbSk7CgogICAgZm9yKGludCBqPTA7ajxuO2orKykgewogICAgICBzY2FuZigiJXMiLHN0cik7CgogICAgICAKICAgICAgZm9yKGludCBrPTA7azxtO2srKykgewkKCWNoPXN0cltrXS00ODsKCWlmKCFjaCkgewoJICBkaXN0W2pdW2tdPUlOVF9NQVg7CgkgIGNvbG9yW2pdW2tdPTE7Cgl9CgllbHNlIHsKCSAgZGlzdFtqXVtrXT0wOwoJICBjb2xvcltqXVtrXT0wOwoJICB0ZW1wLmZpcnN0PWo7CgkgIHRlbXAuc2Vjb25kPWs7CgkgIGJmc1F1ZS5wdXNoKHRlbXApOwoJfQogICAgICB9CgogICAgICAKICAgIH0KCiAgICBiZnMoYmZzUXVlLGRpc3QsY29sb3IsbixtKTsKCiAgICBmb3IoaW50IGo9MDtqPG47aisrKSB7CiAgICAgIGZvcihpbnQgaz0wO2s8bTtrKyspIHsKCXByaW50ZigiJWQiLGRpc3Rbal1ba10pOwoJaWYoayE9KG0tMSkpCgkgIHByaW50ZigiICIpOwogICAgICB9CiAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KICAgIAogIH0KICByZXR1cm4gMDsKfQoK