#include <bits/stdc++.h>
using namespace std;
char mat[ 101 ] [ 101 ] ;
int visited[ 101 ] [ 101 ] = { 0 } ;
void replace( char mat[ 101 ] [ 101 ] ,int i,int j,int n,int m,int visited[ 101 ] [ 101 ] )
{
if ( i== 0 || j== 0 || i== n- 1 || j== m- 1 )
return ;
if ( mat[ i] [ j] == 'X' )
return ;
if ( mat[ i- 1 ] [ j] == 'O' )
return ;
if ( mat[ i] [ j- 1 ] == 'O' )
return ;
else
{
if ( mat[ i] [ j] == 'O' )
{
mat[ i] [ j] = 'X' ;
}
replace( mat,i- 1 ,j,n,m,visited) ;
replace( mat,i+ 1 ,j,n,m,visited) ;
replace( mat,i,j- 1 ,n,m,visited) ;
replace( mat,i,j+ 1 ,n,m,visited) ;
if ( visited[ i] [ j] == 1 )
mat[ i] [ j] = 'O' ;
}
}
bool check( char mat[ 101 ] [ 101 ] ,int i,int j,int n,int m)
{
//check in left in row if there is X present
for ( int col= j- 1 ; col>= 0 ; col-- )
{
if ( mat[ i] [ col] == 'X' )
break ;
else if ( col== 0 && mat[ i] [ col] == 'O' )
return false ;
}
//check in right in row if there is X present
for ( int col= j+ 1 ; col< m; col++ )
{
if ( mat[ i] [ col] == 'X' )
break ;
else if ( col== m- 1 && mat[ i] [ col] == 'O' )
return false ;
}
//check in upward in col if there is X present
for ( int row= i- 1 ; row>= 0 ; row-- )
{
if ( mat[ row] [ j] == 'X' )
break ;
else if ( row== 0 && mat[ row] [ j] == 'O' )
return false ;
}
//check in downward in col if there is X present
for ( int row= i+ 1 ; row< n; row++ )
{
if ( mat[ row] [ j] == 'X' )
break ;
else if ( row== n- 1 && mat[ row] [ j] == 'O' )
return false ;
}
return true ;
}
void find( char mat[ 101 ] [ 101 ] ,int n,int m)
{
for ( int i= 1 ; i< n- 1 ; i++ )
{
for ( int j= 1 ; j< m- 1 ; j++ )
{
if ( mat[ i] [ j] == 'O' )
{
if ( check( mat,i,j,n,m) == true )
replace( mat,i,j,n,m,visited) ;
else
visited[ i] [ j] = 1 ;
}
}
}
}
int main( ) {
//code
int t;
cin >> t;
while ( t-- )
{
int n,m;
cin >> n>> m;
for ( int i= 0 ; i< n; i++ )
{
for ( int j= 0 ; j< m; j++ )
{
cin >> mat[ i] [ j] ;
}
}
for ( int i= 0 ; i< n; i++ )
{
for ( int j= 0 ; j< m; j++ )
cout << mat[ i] [ j] << " " ;
cout << endl;
}
cout << endl;
find( mat,n,m) ;
for ( int i= 0 ; i< n; i++ )
{
for ( int j= 0 ; j< m; j++ )
cout << mat[ i] [ j] << " " ;
cout << endl;
}
cout << endl;
}
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNoYXIgbWF0WzEwMV1bMTAxXTsKaW50IHZpc2l0ZWRbMTAxXVsxMDFdPXswfTsKdm9pZCByZXBsYWNlKGNoYXIgbWF0WzEwMV1bMTAxXSxpbnQgaSxpbnQgaixpbnQgbixpbnQgbSxpbnQgdmlzaXRlZFsxMDFdWzEwMV0pCnsKCWlmKGk9PTAgfHwgaj09MCB8fCBpPT1uLTEgfHwgaj09bS0xKQoJcmV0dXJuIDsKCWlmKG1hdFtpXVtqXT09J1gnKQoJcmV0dXJuOwoJaWYobWF0W2ktMV1bal09PSdPJykKCXJldHVybjsKCWlmKG1hdFtpXVtqLTFdPT0nTycpCglyZXR1cm47CgllbHNlCgl7CglpZihtYXRbaV1bal09PSdPJykKCXsKCW1hdFtpXVtqXT0nWCc7Cgl9CglyZXBsYWNlKG1hdCxpLTEsaixuLG0sdmlzaXRlZCk7CglyZXBsYWNlKG1hdCxpKzEsaixuLG0sdmlzaXRlZCk7CglyZXBsYWNlKG1hdCxpLGotMSxuLG0sdmlzaXRlZCk7CglyZXBsYWNlKG1hdCxpLGorMSxuLG0sdmlzaXRlZCk7CglpZih2aXNpdGVkW2ldW2pdPT0xKQoJbWF0W2ldW2pdPSdPJzsKCX0KfQpib29sIGNoZWNrKGNoYXIgbWF0WzEwMV1bMTAxXSxpbnQgaSxpbnQgaixpbnQgbixpbnQgbSkKewogICAgLy9jaGVjayBpbiBsZWZ0IGluIHJvdyBpZiB0aGVyZSBpcyBYIHByZXNlbnQKICAgIGZvcihpbnQgY29sPWotMTtjb2w+PTA7Y29sLS0pCiAgICB7CiAgICAgICAgaWYobWF0W2ldW2NvbF09PSdYJykKICAgICAgICBicmVhazsKICAgICAgICBlbHNlIGlmKGNvbD09MCAmJiBtYXRbaV1bY29sXT09J08nKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8vY2hlY2sgaW4gcmlnaHQgaW4gcm93IGlmIHRoZXJlIGlzIFggcHJlc2VudAogICAgIGZvcihpbnQgY29sPWorMTtjb2w8bTtjb2wrKykKICAgIHsKICAgICAgICBpZihtYXRbaV1bY29sXT09J1gnKQogICAgICAgIGJyZWFrOwogICAgICAgIGVsc2UgaWYoY29sPT1tLTEgJiYgbWF0W2ldW2NvbF09PSdPJykKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAvL2NoZWNrIGluIHVwd2FyZCBpbiBjb2wgaWYgdGhlcmUgaXMgWCBwcmVzZW50CiAgICBmb3IoaW50IHJvdz1pLTE7cm93Pj0wO3Jvdy0tKQogICAgewogICAgICAgIGlmKG1hdFtyb3ddW2pdPT0nWCcpCiAgICAgICBicmVhazsKICAgICAgICBlbHNlIGlmKHJvdz09MCAmJiBtYXRbcm93XVtqXT09J08nKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8vY2hlY2sgaW4gZG93bndhcmQgaW4gY29sIGlmIHRoZXJlIGlzIFggcHJlc2VudAogICAgZm9yKGludCByb3c9aSsxO3JvdzxuO3JvdysrKQogICAgewogICAgICAgIGlmKG1hdFtyb3ddW2pdPT0nWCcpCiAgICAgICAgYnJlYWs7CiAgICAgICAgZWxzZSBpZihyb3c9PW4tMSAmJiBtYXRbcm93XVtqXT09J08nKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgcmV0dXJuIHRydWU7Cn0Kdm9pZCBmaW5kKGNoYXIgbWF0WzEwMV1bMTAxXSxpbnQgbixpbnQgbSkKewogICAgZm9yKGludCBpPTE7aTxuLTE7aSsrKQogICAgewogICAgICAgIGZvcihpbnQgaj0xO2o8bS0xO2orKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKG1hdFtpXVtqXT09J08nKQogICAgICAgICAgICB7CiAgICAgICAgICBpZihjaGVjayhtYXQsaSxqLG4sbSk9PXRydWUpCiAgICAgICAgICByZXBsYWNlKG1hdCxpLGosbixtLHZpc2l0ZWQpOwogICAgICAgICAgZWxzZSAKICAgICAgICAgIHZpc2l0ZWRbaV1bal09MTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgCn0KaW50IG1haW4oKSB7CgkvL2NvZGUKCWludCB0OwoJY2luPj50OwoJd2hpbGUodC0tKQoJewoJICAgaW50IG4sbTsKCSAgIGNpbj4+bj4+bTsKCSAgIGZvcihpbnQgaT0wO2k8bjtpKyspCgkgICB7CgkgICAgICAgZm9yKGludCBqPTA7ajxtO2orKykKCSAgICAgICB7CgkgICAgICAgICAgIGNpbj4+bWF0W2ldW2pdOwoJICAgICAgIH0KCSAgIH0KCSAgIGZvcihpbnQgaT0wO2k8bjtpKyspCgkgICB7CgkgICAgICAgZm9yKGludCBqPTA7ajxtO2orKykKCSAgICAgICBjb3V0PDxtYXRbaV1bal08PCIgIjsKCSAgICAgICBjb3V0PDxlbmRsOwoJICAgfQoJICAgY291dDw8ZW5kbDsKCSAgIGZpbmQobWF0LG4sbSk7CgkgICBmb3IoaW50IGk9MDtpPG47aSsrKQoJICAgewoJICAgICAgIGZvcihpbnQgaj0wO2o8bTtqKyspCgkgICAgICAgY291dDw8bWF0W2ldW2pdPDwiICI7CgkgICAgICAgY291dDw8ZW5kbDsKCSAgIH0KCSAgIGNvdXQ8PGVuZGw7Cgl9CglyZXR1cm4gMDsKfQ==