class Solution {
public:
void solve(vector<vector<char>> &tmp)
{
int m=tmp.size();
if(m==0) return;
int n=tmp[0].size();
//set 1 at edges
for(int i=0;i<n;i++)
if(tmp[0][i]=='O') tmp[0][i]=1;
for(int i=0;i<n;i++)
if(tmp[m-1][i]=='O') tmp[m-1][i]=1;
for(int i=0;i<m;i++)
if(tmp[i][0]=='O') tmp[i][0]=1;
for(int i=0;i<m;i++)
if(tmp[i][n-1]=='O') tmp[i][n-1]=1;
while(true)
{
//get a '0' beside 1
bool find=false;
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
if(tmp[i][j]=='O')
{
if(check(tmp,m,n,i-1,j,1) || check(tmp,m,n,i+1,j,1) ||check(tmp,m,n,i,j-1,1) ||check(tmp,m,n,i,j+1,1))
{
find=true;
break;
}
}
if(find) break;
}
if(!find) break;
//fill
while(tmp[i][j]=='O')
{
tmp[i][j]=1;
if(check(tmp,m,n,i-1,j,'O'))
{
i=i-1;continue;
}
if(check(tmp,m,n,i+1,j,'O'))
{
i=i+1;continue;
}
if(check(tmp,m,n,i,j-1,'O'))
{
j=j-1;continue;
}
if(check(tmp,m,n,i,j+1,'O'))
{
j=j+1;continue;
}
}
}
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(tmp[i][j]==1)
tmp[i][j]='O';
else
tmp[i][j]='X';
}
bool check(const vector<vector<char>> &tmp,int m,int n,int x,int y,char c)
{
if(x<0 || x>=m) return false;
if(y<0 || y>=n) return false;
if(tmp[x][y]==c) return true;
return false;
}
};