#include <bits/stdc++.h>
#define UNVISITED 0
#define VISITED 1
using namespace std;
long kase,m,n,longRun=-123;
int IN[123][123],table[123][123];
bool isGreater(int x, int y) { return x >= y; }
bool isOk (int x, int y) { return x>=1 && x<=n && y<=n && y>=1; }
int sub(int x, int y) { return x-y; }
void Clear(){
for( int i=1; i<=n; i++ ){
for( int j=1; j<=m; j++ ){
IN[i][j] = 0; table[i][j] = UNVISITED;
}
}
}
bool isFalse( int i, int j ){ // Boundary problem thakte pare..
if( isGreater(IN[i][j],IN[i][j-1]) ||
isGreater(IN[i][j],IN[i][j+1]) ||
isGreater(IN[i][j],IN[i-1][j]) ||
isGreater(IN[i][j],IN[i+1][j]) ) return false;
return true;
}
int DP ( int i, int j ){
if( table[i][j] != UNVISITED ) return table[i][j];
if( isFalse(i,j) ) return table[i][j] = 1;
if( isGreater(IN[i][j],IN[i][j-1] ) && isOk(i,j-1) ){
int ans = 1 + DP(i,j-1);
table[i][j] = max( ans, table[i][j] ) ;
cout << i << "," << j-1 << " " << table[i][j] << endl;
return table[i][j];
}
if( isGreater(IN[i][j],IN[i][j+1]) && isOk(i,j+1) ){
int ans = 1 + DP(i,j+1);
table[i][j] = max( ans, table[i][j] ) ;
cout << i << "," << j+1 << " " << table[i][j] << endl;
return table[i][j];
}
if( isGreater(IN[i][j],IN[i-1][j]) && isOk(i-1,j) ){
int ans = 1 + DP(i-1,j);
table[i][j] = max( ans, table[i][j] ) ;
cout << i-1 << "," << j << " " << table[i][j] << endl;
return table[i][j];
}
if( isGreater(IN[i][j],IN[i+1][j] ) && isOk(i+1,j) ){
int ans = 1 + DP(i+1,j);
table[i][j] = max( ans, table[i][j] ) ;
cout << i+1 << "," << j << " " << table[i][j] << endl;
return table[i][j];
}
}
void Solve(){
for ( int i=1; i<=n; i++ ){
for( int j=1; j<=m; j++ ){
if( table[i][j] == UNVISITED ){
int ans = DP(i,j);;
table[i][j] = max ( ans, table[i][j] );
}
}
}
}
void Print(){
for ( int i=1; i<=n; i++ ){
for( int j=1; j<=m; j++ ){
cout << table[i][j] << " ";
longRun = ( table[i][j] > longRun ) ? table[i][j] : longRun ;
}
cout << endl;
}
}
int main (){
cin >> kase;
Clear();
for ( int k=1; k<=kase; k++ ){
string name; cin >> name;
cin >> n >> m;
for ( int i=1; i<=n; i++ ){
for ( int j=1; j<=m; j++ ){
cin >> IN[i][j];
}
}
for( int i=1; i<=n; i++ ){
for ( int j=1; j<=n; j++ ){
table[i][j] = UNVISITED;
}
}
Solve();
Print();
cout << endl;
cout << name << ":" << longRun << endl;
Clear();
}
return 0;
}