#include<bits/stdc++.h>
using namespace std;
#define se second
#define fi first
#define fo(i,m,n) for(int i=m;i<n;i++)
#define ll long long
#define l long
#define vecll vector<ll>
#define vecl vector<l>
#define veci vector<int>
#define mp make_pair
#define bg begin()
#define ed end()
#define ios ios_base::sync_with_stdio(0)
#define pb push_back
#define xd LLONG_MAX
#define inf 1000000
int a[1001][1001];
char c[1001][1001];
int vis[1001][1001];
int n,m;
void BFS(int x,int y,int k)
{
vis[x][y]=1; // marked node as visited
queue<pair<pair<int,int>,int>> q;
q.push(mp(mp(x,y),k)); // pair ((vertices),time)
while(!q.empty())
{
int f=q.front().fi.fi; // x coordinate
int g=q.front().fi.se; // y coordinate
int h=q.front().se; // time associated
h=max(a[f][g],h); // may be the itself have some more value than previous cycle
q.pop();
if(a[f][g-1]!=-1&&h>0&&g-1>=0&&vis[f][g-1]==0) // if a[val]!=-1 and time>0 and in array and not visited
{vis[f][g-1]=1; // mark as visited
//c[f][g-1]='Y';
q.push(mp(mp(f,g-1),h-1)); // push vertices and time left with them
}
if(a[f][g+1]!=-1&&h>0&&g+1<m&&vis[f][g+1]==0)
{vis[f][g+1]=1;
//c[f][g+1]='Y';
q.push(mp(mp(f,g+1),h-1));
}
if(a[f-1][g]!=-1&&h>0&&f-1>=0&&vis[f-1][g]==0)
{vis[f-1][g]=1;
//c[f-1][g]='Y';
q.push(mp(mp(f-1,g),h-1));
}
if(a[f+1][g]!=-1&&h>0&&f+1<n&&vis[f+1][g]==0)
{vis[f+1][g]=1;
//c[f+1][g]='Y';
q.push(mp(mp(f+1,g),h-1));
}
}// While
} // BFS
int main()
{ios;
cin.tie(NULL);
int t;
cin>>t; // test cASES
while(t--)
{
priority_queue<pair<int,pair<int,int>>> pr; //priority queue for greater element at front
cin>>n>>m; // rows columns
fo(i,0,n) // 0 to n-1
fo(j,0,m)
{
cin>>a[i][j]; // insert array value
vis[i][j]=0; // univisit
if(a[i][j]>0)
pr.push(mp(a[i][j],mp(i,j))); // inserting time values in priority queue
}
while(!pr.empty())
{
int x=pr.top().se.fi; // x coordinate for BFS
int y=pr.top().se.se; // y coordinate for BFS
int k=pr.top().fi; // associated time with vertex for BFS
pr.pop();
if(vis[x][y]==0) // run only if it is not visited
BFS(x,y,k);
}
fo(i,0,n)
{fo(j,0,m)
{
if(vis[i][j]==1) // if array was visited then Y
cout<<"Y";
else if(a[i][j]==-1)
cout<<"B";
else cout<<"N";
}
cout<<"\n";
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIGZvKGksbSxuKSBmb3IoaW50IGk9bTtpPG47aSsrKQojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGwgbG9uZwojZGVmaW5lIHZlY2xsIHZlY3RvcjxsbD4KI2RlZmluZSB2ZWNsIHZlY3RvcjxsPgojZGVmaW5lIHZlY2kgdmVjdG9yPGludD4KI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBiZyBiZWdpbigpCiNkZWZpbmUgZWQgZW5kKCkKI2RlZmluZSBpb3MgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIHhkIExMT05HX01BWAojZGVmaW5lIGluZiAxMDAwMDAwCmludCBhWzEwMDFdWzEwMDFdOwpjaGFyIGNbMTAwMV1bMTAwMV07CmludCB2aXNbMTAwMV1bMTAwMV07CmludCBuLG07CnZvaWQgQkZTKGludCB4LGludCB5LGludCBrKQp7CnZpc1t4XVt5XT0xOyAgLy8gbWFya2VkIG5vZGUgYXMgdmlzaXRlZAoKcXVldWU8cGFpcjxwYWlyPGludCxpbnQ+LGludD4+IHE7ICAKcS5wdXNoKG1wKG1wKHgseSksaykpOyAgICAgLy8gcGFpciAoKHZlcnRpY2VzKSx0aW1lKQp3aGlsZSghcS5lbXB0eSgpKQp7CmludCBmPXEuZnJvbnQoKS5maS5maTsgICAgICAgICAvLyB4IGNvb3JkaW5hdGUKaW50IGc9cS5mcm9udCgpLmZpLnNlOyAgICAgICAvLyB5IGNvb3JkaW5hdGUKaW50IGg9cS5mcm9udCgpLnNlOyAgICAgICAgICAgLy8gdGltZSBhc3NvY2lhdGVkCmg9bWF4KGFbZl1bZ10saCk7ICAgICAgICAgICAgLy8gbWF5IGJlIHRoZSBpdHNlbGYgaGF2ZSBzb21lIG1vcmUgdmFsdWUgdGhhbiBwcmV2aW91cyBjeWNsZQpxLnBvcCgpOwppZihhW2ZdW2ctMV0hPS0xJiZoPjAmJmctMT49MCYmdmlzW2ZdW2ctMV09PTApICAvLyBpZiBhW3ZhbF0hPS0xIGFuZCB0aW1lPjAgIGFuZCBpbiBhcnJheSBhbmQgbm90IHZpc2l0ZWQKe3Zpc1tmXVtnLTFdPTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFyayBhcyB2aXNpdGVkCi8vY1tmXVtnLTFdPSdZJzsKcS5wdXNoKG1wKG1wKGYsZy0xKSxoLTEpKTsgICAgICAgICAgICAgLy8gcHVzaCB2ZXJ0aWNlcyBhbmQgdGltZSBsZWZ0IHdpdGggdGhlbQp9CQoKCmlmKGFbZl1bZysxXSE9LTEmJmg+MCYmZysxPG0mJnZpc1tmXVtnKzFdPT0wKQp7dmlzW2ZdW2crMV09MTsKLy9jW2ZdW2crMV09J1knOwpxLnB1c2gobXAobXAoZixnKzEpLGgtMSkpOwp9CgppZihhW2YtMV1bZ10hPS0xJiZoPjAmJmYtMT49MCYmdmlzW2YtMV1bZ109PTApCnt2aXNbZi0xXVtnXT0xOwovL2NbZi0xXVtnXT0nWSc7CnEucHVzaChtcChtcChmLTEsZyksaC0xKSk7Cn0KCmlmKGFbZisxXVtnXSE9LTEmJmg+MCYmZisxPG4mJnZpc1tmKzFdW2ddPT0wKQp7dmlzW2YrMV1bZ109MTsKLy9jW2YrMV1bZ109J1knOwpxLnB1c2gobXAobXAoZisxLGcpLGgtMSkpOwp9Cn0vLyBXaGlsZQoKfSAvLyBCRlMKaW50IG1haW4oKQp7aW9zOwpjaW4udGllKE5VTEwpOwkKaW50IHQ7CmNpbj4+dDsgICAgICAgICAgICAvLyB0ZXN0IGNBU0VTCndoaWxlKHQtLSkKewpwcmlvcml0eV9xdWV1ZTxwYWlyPGludCxwYWlyPGludCxpbnQ+Pj4gcHI7ICAgLy9wcmlvcml0eSBxdWV1ZSBmb3IgZ3JlYXRlciBlbGVtZW50IGF0IGZyb250CmNpbj4+bj4+bTsgICAgICAgICAvLyByb3dzIGNvbHVtbnMKZm8oaSwwLG4pICAgICAgLy8gMCB0byBuLTEKZm8oaiwwLG0pCnsKY2luPj5hW2ldW2pdOyAgICAgICAvLyBpbnNlcnQgYXJyYXkgdmFsdWUKdmlzW2ldW2pdPTA7ICAgICAgICAvLyB1bml2aXNpdCAKaWYoYVtpXVtqXT4wKQpwci5wdXNoKG1wKGFbaV1bal0sbXAoaSxqKSkpOyAgICAvLyBpbnNlcnRpbmcgdGltZSB2YWx1ZXMgaW4gcHJpb3JpdHkgcXVldWUKfQp3aGlsZSghcHIuZW1wdHkoKSkKewppbnQgeD1wci50b3AoKS5zZS5maTsgICAvLyB4IGNvb3JkaW5hdGUgZm9yIEJGUwppbnQgeT1wci50b3AoKS5zZS5zZTsgIC8vIHkgY29vcmRpbmF0ZSBmb3IgQkZTCmludCBrPXByLnRvcCgpLmZpOyAgICAvLyBhc3NvY2lhdGVkIHRpbWUgd2l0aCB2ZXJ0ZXggZm9yIEJGUwpwci5wb3AoKTsKaWYodmlzW3hdW3ldPT0wKSAgICAgICAgLy8gcnVuIG9ubHkgaWYgaXQgaXMgbm90IHZpc2l0ZWQKQkZTKHgseSxrKTsKfQpmbyhpLDAsbikKe2ZvKGosMCxtKQp7CmlmKHZpc1tpXVtqXT09MSkgICAgICAgIC8vIGlmIGFycmF5IHdhcyB2aXNpdGVkIHRoZW4gWQpjb3V0PDwiWSI7CmVsc2UgaWYoYVtpXVtqXT09LTEpIApjb3V0PDwiQiI7CmVsc2UgY291dDw8Ik4iOwp9CmNvdXQ8PCJcbiI7Cn0KCn0KCgoKCgoKCgoKCglyZXR1cm4gMDsKfQ==