#include<queue>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<stdlib.h>
#include<algorithm>
#include<iomanip>
#include<set>
#include<vector>
#include<utility>
#include<stack>
#define getcx getchar_unlocked
#ifndef ONLINE_JUDGE
#define getcx getchar
#endif
//#define mod 1000000007
#define rep(i,n) for(int i=0;i<n;++i)
#define rep1(i,j,n) for(int i=j;i<n;++i)
#define repl1(i,j,n) for(long long i=j;i<n;++i)
#define repl(i,n) for(long long i=0;i<n;++i)
#define ll long long
using namespace std;
main()
{
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
ll t;
queue<pair<int,int> > q;
pair<int,int> temp;
int n,m;
int dist[185][185];
bool visited[185][185];
char a[185][185];
scanf("%lld",&t);
while(t--)
{
memset(visited,0,sizeof(visited));
scanf("%d%d",&n,&m);
for(int i=0;i<n;++i)
scanf("%s",&a[i]);
for(int i=0;i<n;++i)
{
// cout<<a[i]<<endl;
for(int j=0;j<m;++j)
{
if(a[i][j]=='1')
{
temp=make_pair(i,j);
q.push(temp);
dist[i][j]=0;
visited[i][j]=1;
// cout<<i<<" "<<j<<endl;
}
}
}
while(!q.empty())
{
temp=q.front();
q.pop();
//cout<<temp.first<<" "<<temp.second<<endl;
//visited[temp.first][temp.second]=1;
for(int i=0;i<4;++i)
{
int X=temp.first+dx[i];
int Y=temp.second+dy[i];
if(X>=0&&X<n&&Y>=0&&Y<m)
{
if(visited[X][Y]==0)
{
dist[X][Y]=dist[temp.first][temp.second]+1;
visited[X][Y]=1;
temp.first=X;temp.second=Y;
q.push(temp);
}
}
}
/*for(int k=0;k<n;++k)
{
for(int j=0;j<m;++j)
printf("%d ",dist[k][j]);
printf("\n\n");
}*/
}
for(int i=0;i<n;++i)
{
for(int j=0;j<m;++j)
printf("%d ",dist[i][j]);
printf("\n");
}
}
}
I2luY2x1ZGU8cXVldWU+CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxjc3RkaW8+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxzdGRsaWIuaD4KI2luY2x1ZGU8YWxnb3JpdGhtPgojaW5jbHVkZTxpb21hbmlwPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8dXRpbGl0eT4KI2luY2x1ZGU8c3RhY2s+CiNkZWZpbmUgZ2V0Y3ggZ2V0Y2hhcl91bmxvY2tlZAojaWZuZGVmIE9OTElORV9KVURHRQojZGVmaW5lIGdldGN4IGdldGNoYXIKI2VuZGlmCi8vI2RlZmluZSBtb2QgMTAwMDAwMDAwNwojZGVmaW5lIHJlcChpLG4pIGZvcihpbnQgaT0wO2k8bjsrK2kpCiNkZWZpbmUgcmVwMShpLGosbikgZm9yKGludCBpPWo7aTxuOysraSkKI2RlZmluZSByZXBsMShpLGosbikgZm9yKGxvbmcgbG9uZyBpPWo7aTxuOysraSkKI2RlZmluZSByZXBsKGksbikgZm9yKGxvbmcgbG9uZyBpPTA7aTxuOysraSkKI2RlZmluZSBsbCBsb25nIGxvbmcKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKbWFpbigpCnsKCWludCBkeFs0XT17LTEsMSwwLDB9OwoJaW50IGR5WzRdPXswLDAsLTEsMX07CglsbCB0OwoJcXVldWU8cGFpcjxpbnQsaW50PiA+IHE7CglwYWlyPGludCxpbnQ+IHRlbXA7CglpbnQgbixtOwoJaW50IGRpc3RbMTg1XVsxODVdOwoJYm9vbCB2aXNpdGVkWzE4NV1bMTg1XTsKCWNoYXIgYVsxODVdWzE4NV07CglzY2FuZigiJWxsZCIsJnQpOwoJd2hpbGUodC0tKQoJewoJCW1lbXNldCh2aXNpdGVkLDAsc2l6ZW9mKHZpc2l0ZWQpKTsKCQlzY2FuZigiJWQlZCIsJm4sJm0pOwoJCWZvcihpbnQgaT0wO2k8bjsrK2kpCgkJc2NhbmYoIiVzIiwmYVtpXSk7CgkJZm9yKGludCBpPTA7aTxuOysraSkKCQl7CgkJLy8JY291dDw8YVtpXTw8ZW5kbDsKCQkJZm9yKGludCBqPTA7ajxtOysraikKCQkJewoJCQkJaWYoYVtpXVtqXT09JzEnKQoJCQkJewoJCQkJCXRlbXA9bWFrZV9wYWlyKGksaik7CgkJCQkJcS5wdXNoKHRlbXApOwoJCQkJCWRpc3RbaV1bal09MDsKCQkJCQl2aXNpdGVkW2ldW2pdPTE7CgkJCQkvLwljb3V0PDxpPDwiICI8PGo8PGVuZGw7CgkJCQl9CgkJCX0KCQl9CgkJCgkJd2hpbGUoIXEuZW1wdHkoKSkKCQl7CgkJCXRlbXA9cS5mcm9udCgpOwoJCQlxLnBvcCgpOwoJCQkvL2NvdXQ8PHRlbXAuZmlyc3Q8PCIgIjw8dGVtcC5zZWNvbmQ8PGVuZGw7CgkJCS8vdmlzaXRlZFt0ZW1wLmZpcnN0XVt0ZW1wLnNlY29uZF09MTsKCQkJZm9yKGludCBpPTA7aTw0OysraSkKCQkJewoJCQkJaW50IFg9dGVtcC5maXJzdCtkeFtpXTsKCQkJCWludCBZPXRlbXAuc2Vjb25kK2R5W2ldOwoJCQkJaWYoWD49MCYmWDxuJiZZPj0wJiZZPG0pCgkJCQl7CgkJCQkJaWYodmlzaXRlZFtYXVtZXT09MCkKCQkJCQl7CgkJCQkJCWRpc3RbWF1bWV09ZGlzdFt0ZW1wLmZpcnN0XVt0ZW1wLnNlY29uZF0rMTsKCQkJCQkJdmlzaXRlZFtYXVtZXT0xOwoJCQkJCQl0ZW1wLmZpcnN0PVg7dGVtcC5zZWNvbmQ9WTsKCQkJCQkJcS5wdXNoKHRlbXApOwoJCQkJCX0KCQkJCX0KCQkJfQoJCS8qZm9yKGludCBrPTA7azxuOysraykKCQl7CgkJCWZvcihpbnQgaj0wO2o8bTsrK2opCgkJCXByaW50ZigiJWQgIixkaXN0W2tdW2pdKTsKCQkJcHJpbnRmKCJcblxuIik7CgkJfSovCgkJfQoJCWZvcihpbnQgaT0wO2k8bjsrK2kpCgkJewoJCQlmb3IoaW50IGo9MDtqPG07KytqKQoJCQlwcmludGYoIiVkICIsZGlzdFtpXVtqXSk7CgkJCXByaW50ZigiXG4iKTsKCQl9Cgl9Cn0KCg==