#include<bits/stdc++.h>
using namespace std;
int kk=-1e9+7;
vector<int>SegTree(4*100005,kk);
vector<int>SegTree2(4*100005,kk);
bool comp(pair<int,pair<int,int>>&abc,pair<int,pair<int,int>>&def)
{
if(abc.first==def.first)
{
return abc.second.first<def.second.first;
}
return abc.first<def.first;
}
void update(int start,int end,int Tree_index,int qstart,int qend,int val)
{
if(end<qstart || qend<start)
{
return;
}
if(qstart<=start && qend>=end)
{
SegTree[Tree_index]=val;
return;
}
int mid=(start+end)/2;
update(start,mid,2*Tree_index+1,qstart,qend,val);
update(mid+1,end,2*Tree_index+2,qstart,qend,val);
}
void update2(int start,int end,int Tree_index,int qstart,int qend,int val)
{
if(end<qstart || qend<start)
{
return;
}
if(qstart<=start && qend>=end)
{
SegTree2[Tree_index]=val;
return;
}
int mid=(start+end)/2;
update2(start,mid,2*Tree_index+1,qstart,qend,val);
update2(mid+1,end,2*Tree_index+2,qstart,qend,val);
}
int query(int start,int end,int Tree_index,int qstart,int qend)
{
if(end<qstart || qend<start)
{
return kk;
}
if(qstart<=start && qend>=end)
{
return SegTree[Tree_index];
}
int mid=(start+end)/2;
return max(query(start,mid,2*Tree_index+1,qstart,qend),query(mid+1,end,2*Tree_index+2,qstart,qend));
}
int query2(int start,int end,int Tree_index,int qstart,int qend)
{
if(end<qstart || qend<start)
{
return kk;
}
if(qstart<=start && qend>=end)
{
return SegTree2[Tree_index];
}
int mid=(start+end)/2;
return max(query2(start,mid,2*Tree_index+1,qstart,qend),query2(mid+1,end,2*Tree_index+2,qstart,qend));
}
int main()
{
int test;
cin>>test;
while(test--)
{
int row,col;
cin>>row>>col;
vector<vector<int>>input(row,vector<int>(col));
vector<vector<int>>output(row,vector<int>(col));
vector<pair<int,pair<int,int>>>temp;
for(int i=0;i<row;++i)
{
for(int j=0;j<col;++j)
{
cin>>input[i][j];
temp.push_back({input[i][j],{i,j}});
}
}
sort(temp.begin(),temp.end(),comp);
int pk=1,prev;
for(int i=0;i<temp.size();++i)
{
int x=temp[i].second.first,y=temp[i].second.second;
int curr_row_start=col*x+1;
int curr_row_end=col*(x+1);
int curr_col_start=row*y+1;
int curr_col_end=row*(y+1);
//cout<<"++++++++++++++++++++++++++++++++++++++"<<endl;
//cout<<curr_row_start<<" :: "<<curr_row_end<<endl;
//cout<<curr_col_start<<" :: "<<curr_col_end<<endl;
//cout<<temp[i].first<<" index "<<x<<" :: "<<y<<endl;
if(i==0)
{
output[x][y]=pk;
update(1,row*col,0,curr_row_start,curr_row_end,pk);
update2(1,row*col,0,curr_col_start,curr_col_end,pk);
prev=temp[i].first;
}
else
{
if(temp[i].first==prev)
{
update(1,row*col,0,curr_row_start,curr_row_end,pk);
update2(1,row*col,0,curr_col_start,curr_col_end,pk);
output[x][y]=pk;
}
else
{
int ss=query(1,row*col,0,curr_row_start,curr_row_end);
// cout<<"ss "<<ss<<endl;
int zz=query2(1,row*col,0,curr_col_start,curr_col_end);
//cout<<"zz "<<zz<<endl;
if(ss==zz && ss==kk)
{
update(1,row*col,0,curr_row_start,curr_row_end,pk);
update2(1,row*col,0,curr_col_start,curr_col_end,pk);
output[x][y]=pk;
}
else
{
pk=max(ss,zz)+1;
output[x][y]=pk;
update(1,row*col,0,curr_row_start,curr_row_end,pk);
update2(1,row*col,0,curr_col_start,curr_col_end,pk);
}
prev=temp[i].first;
}
}
//cout<<output[x][y]<<endl;
}
// cout<<"+++++++++++++++++++++++++"<<endl;
for(int i=0;i<row;++i)
{
for(int j=0;j<col;++j)
{
cout<<output[i][j]<<" ";
}
cout<<endl;
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IGtrPS0xZTkrNzsKdmVjdG9yPGludD5TZWdUcmVlKDQqMTAwMDA1LGtrKTsKdmVjdG9yPGludD5TZWdUcmVlMig0KjEwMDAwNSxrayk7CmJvb2wgY29tcChwYWlyPGludCxwYWlyPGludCxpbnQ+PiZhYmMscGFpcjxpbnQscGFpcjxpbnQsaW50Pj4mZGVmKQp7CiAgICBpZihhYmMuZmlyc3Q9PWRlZi5maXJzdCkKICAgIHsKICAgICAgICByZXR1cm4gYWJjLnNlY29uZC5maXJzdDxkZWYuc2Vjb25kLmZpcnN0OwogICAgfQogICAgcmV0dXJuIGFiYy5maXJzdDxkZWYuZmlyc3Q7Cn0Kdm9pZCB1cGRhdGUoaW50IHN0YXJ0LGludCBlbmQsaW50IFRyZWVfaW5kZXgsaW50IHFzdGFydCxpbnQgcWVuZCxpbnQgdmFsKQp7CiAgICBpZihlbmQ8cXN0YXJ0IHx8IHFlbmQ8c3RhcnQpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYocXN0YXJ0PD1zdGFydCAmJiBxZW5kPj1lbmQpCiAgICB7CiAgICAgICAgU2VnVHJlZVtUcmVlX2luZGV4XT12YWw7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG1pZD0oc3RhcnQrZW5kKS8yOwogICAgdXBkYXRlKHN0YXJ0LG1pZCwyKlRyZWVfaW5kZXgrMSxxc3RhcnQscWVuZCx2YWwpOwogICAgdXBkYXRlKG1pZCsxLGVuZCwyKlRyZWVfaW5kZXgrMixxc3RhcnQscWVuZCx2YWwpOwp9CnZvaWQgdXBkYXRlMihpbnQgc3RhcnQsaW50IGVuZCxpbnQgVHJlZV9pbmRleCxpbnQgcXN0YXJ0LGludCBxZW5kLGludCB2YWwpCnsKICAgIGlmKGVuZDxxc3RhcnQgfHwgcWVuZDxzdGFydCkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZihxc3RhcnQ8PXN0YXJ0ICYmIHFlbmQ+PWVuZCkKICAgIHsKICAgICAgICBTZWdUcmVlMltUcmVlX2luZGV4XT12YWw7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG1pZD0oc3RhcnQrZW5kKS8yOwogICAgdXBkYXRlMihzdGFydCxtaWQsMipUcmVlX2luZGV4KzEscXN0YXJ0LHFlbmQsdmFsKTsKICAgIHVwZGF0ZTIobWlkKzEsZW5kLDIqVHJlZV9pbmRleCsyLHFzdGFydCxxZW5kLHZhbCk7Cn0KaW50IHF1ZXJ5KGludCBzdGFydCxpbnQgZW5kLGludCBUcmVlX2luZGV4LGludCBxc3RhcnQsaW50IHFlbmQpCnsKICAgIGlmKGVuZDxxc3RhcnQgfHwgcWVuZDxzdGFydCkKICAgIHsKICAgICAgICByZXR1cm4ga2s7CiAgICB9CiAgICBpZihxc3RhcnQ8PXN0YXJ0ICYmIHFlbmQ+PWVuZCkKICAgIHsKICAgICAgICByZXR1cm4gU2VnVHJlZVtUcmVlX2luZGV4XTsKICAgIH0KICAgIGludCBtaWQ9KHN0YXJ0K2VuZCkvMjsKICAgIHJldHVybiBtYXgocXVlcnkoc3RhcnQsbWlkLDIqVHJlZV9pbmRleCsxLHFzdGFydCxxZW5kKSxxdWVyeShtaWQrMSxlbmQsMipUcmVlX2luZGV4KzIscXN0YXJ0LHFlbmQpKTsKfQppbnQgcXVlcnkyKGludCBzdGFydCxpbnQgZW5kLGludCBUcmVlX2luZGV4LGludCBxc3RhcnQsaW50IHFlbmQpCnsKICAgIGlmKGVuZDxxc3RhcnQgfHwgcWVuZDxzdGFydCkKICAgIHsKICAgICAgICByZXR1cm4ga2s7CiAgICB9CiAgICBpZihxc3RhcnQ8PXN0YXJ0ICYmIHFlbmQ+PWVuZCkKICAgIHsKICAgICAgICByZXR1cm4gU2VnVHJlZTJbVHJlZV9pbmRleF07CiAgICB9CiAgICBpbnQgbWlkPShzdGFydCtlbmQpLzI7CiAgICByZXR1cm4gbWF4KHF1ZXJ5MihzdGFydCxtaWQsMipUcmVlX2luZGV4KzEscXN0YXJ0LHFlbmQpLHF1ZXJ5MihtaWQrMSxlbmQsMipUcmVlX2luZGV4KzIscXN0YXJ0LHFlbmQpKTsKfQppbnQgbWFpbigpCnsKICAgIGludCB0ZXN0OwogICAgY2luPj50ZXN0OwogICAgd2hpbGUodGVzdC0tKQogICAgewogICAgaW50IHJvdyxjb2w7CiAgICBjaW4+PnJvdz4+Y29sOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PmlucHV0KHJvdyx2ZWN0b3I8aW50Pihjb2wpKTsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj5vdXRwdXQocm93LHZlY3RvcjxpbnQ+KGNvbCkpOwogICAgdmVjdG9yPHBhaXI8aW50LHBhaXI8aW50LGludD4+PnRlbXA7CiAgICBmb3IoaW50IGk9MDtpPHJvdzsrK2kpCiAgICB7CiAgICAgICAgZm9yKGludCBqPTA7ajxjb2w7KytqKQogICAgICAgIHsKICAgICAgICAgICAgY2luPj5pbnB1dFtpXVtqXTsKICAgICAgICAgICAgdGVtcC5wdXNoX2JhY2soe2lucHV0W2ldW2pdLHtpLGp9fSk7CiAgICAgICAgfQogICAgfQogICAgc29ydCh0ZW1wLmJlZ2luKCksdGVtcC5lbmQoKSxjb21wKTsKICAgIGludCBwaz0xLHByZXY7CiAgICBmb3IoaW50IGk9MDtpPHRlbXAuc2l6ZSgpOysraSkKICAgIHsKICAgICAgICBpbnQgeD10ZW1wW2ldLnNlY29uZC5maXJzdCx5PXRlbXBbaV0uc2Vjb25kLnNlY29uZDsKICAgICAgICBpbnQgY3Vycl9yb3dfc3RhcnQ9Y29sKngrMTsKICAgICAgICBpbnQgY3Vycl9yb3dfZW5kPWNvbCooeCsxKTsKICAgICAgICBpbnQgY3Vycl9jb2xfc3RhcnQ9cm93KnkrMTsKICAgICAgICBpbnQgY3Vycl9jb2xfZW5kPXJvdyooeSsxKTsKICAgICAgICAvL2NvdXQ8PCIrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyI8PGVuZGw7CiAgICAgICAgLy9jb3V0PDxjdXJyX3Jvd19zdGFydDw8IiA6OiAiPDxjdXJyX3Jvd19lbmQ8PGVuZGw7CiAgICAgICAgLy9jb3V0PDxjdXJyX2NvbF9zdGFydDw8IiA6OiAiPDxjdXJyX2NvbF9lbmQ8PGVuZGw7CiAgICAgICAgLy9jb3V0PDx0ZW1wW2ldLmZpcnN0PDwiIGluZGV4ICI8PHg8PCIgOjogIjw8eTw8ZW5kbDsKICAgICAgICBpZihpPT0wKQogICAgICAgIHsKICAgICAgICAgICAgb3V0cHV0W3hdW3ldPXBrOwogICAgICAgICAgICB1cGRhdGUoMSxyb3cqY29sLDAsY3Vycl9yb3dfc3RhcnQsY3Vycl9yb3dfZW5kLHBrKTsKICAgICAgICAgICAgdXBkYXRlMigxLHJvdypjb2wsMCxjdXJyX2NvbF9zdGFydCxjdXJyX2NvbF9lbmQscGspOwogICAgICAgICAgICBwcmV2PXRlbXBbaV0uZmlyc3Q7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGlmKHRlbXBbaV0uZmlyc3Q9PXByZXYpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHVwZGF0ZSgxLHJvdypjb2wsMCxjdXJyX3Jvd19zdGFydCxjdXJyX3Jvd19lbmQscGspOwogICAgICAgICAgICAgICAgdXBkYXRlMigxLHJvdypjb2wsMCxjdXJyX2NvbF9zdGFydCxjdXJyX2NvbF9lbmQscGspOwogICAgICAgICAgICAgICAgb3V0cHV0W3hdW3ldPXBrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IHNzPXF1ZXJ5KDEscm93KmNvbCwwLGN1cnJfcm93X3N0YXJ0LGN1cnJfcm93X2VuZCk7CiAgICAgICAgICAgICAgLy8gIGNvdXQ8PCJzcyAiPDxzczw8ZW5kbDsKICAgICAgICAgICAgICAgIGludCB6ej1xdWVyeTIoMSxyb3cqY29sLDAsY3Vycl9jb2xfc3RhcnQsY3Vycl9jb2xfZW5kKTsKICAgICAgICAgICAgICAgIC8vY291dDw8Inp6ICI8PHp6PDxlbmRsOwogICAgICAgICAgICAgICAgaWYoc3M9PXp6ICYmIHNzPT1raykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB1cGRhdGUoMSxyb3cqY29sLDAsY3Vycl9yb3dfc3RhcnQsY3Vycl9yb3dfZW5kLHBrKTsKICAgICAgICAgICAgICAgICAgICB1cGRhdGUyKDEscm93KmNvbCwwLGN1cnJfY29sX3N0YXJ0LGN1cnJfY29sX2VuZCxwayk7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W3hdW3ldPXBrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHBrPW1heChzcyx6eikrMTsKICAgICAgICAgICAgICAgICAgICBvdXRwdXRbeF1beV09cGs7CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlKDEscm93KmNvbCwwLGN1cnJfcm93X3N0YXJ0LGN1cnJfcm93X2VuZCxwayk7CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlMigxLHJvdypjb2wsMCxjdXJyX2NvbF9zdGFydCxjdXJyX2NvbF9lbmQscGspOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHJldj10ZW1wW2ldLmZpcnN0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vY291dDw8b3V0cHV0W3hdW3ldPDxlbmRsOwogICAgfQogIC8vICBjb3V0PDwiKysrKysrKysrKysrKysrKysrKysrKysrKyI8PGVuZGw7CiAgICBmb3IoaW50IGk9MDtpPHJvdzsrK2kpCiAgICB7CiAgICAgICAgZm9yKGludCBqPTA7ajxjb2w7KytqKQogICAgICAgIHsKICAgICAgICAgICAgY291dDw8b3V0cHV0W2ldW2pdPDwiICI7CiAgICAgICAgfQogICAgICAgIGNvdXQ8PGVuZGw7CiAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQo=