class Solution {
public:
void deal(int i,int j,vector<vector<char>>&board,int h,int w)
{
typedef pair<int,int> point;
queue<point>q;
q.push(point(i,j));
board[i][j]='1';
while(!q.empty())
{
point tmp=q.front();
q.pop();
int x=tmp.first,y=tmp.second;
if(x!=0&&board[x-1][y]=='O')
{
q.push(point(x-1,y));
board[x-1][y]='1';
}
if(x!=h-1&&board[x+1][y]=='O')
{
q.push(point(x+1,y));
board[x+1][y]='1';
}
if(y!=0&&board[x][y-1]=='O')
{
q.push(point(x,y-1));
board[x][y-1]='1';
}
if(y!=w-1&&board[x][y+1]=='O')
{
q.push(point(x,y+1));
board[x][y+1]='1';
}
}
}
void solve(vector<vector<char>>& board) {
int h=board.size();
if(h==0) return ;
int w=board[0].size();
if(w==0) return ;
int i,j;
for(i=0;i<h;i++)
{
if(board[i][0]=='O')
deal(i,0,board,h,w);
if(board[i][w-1]=='O')
deal(i,w-1,board,h,w);
}
for(j=0;j<w;j++)
{
if(board[0][j]=='O')
deal(0,j,board,h,w);
if(board[h-1][j]=='O')
deal(h-1,j,board,h,w);
}
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
if(board[i][j]=='1')
board[i][j]='O';
else
board[i][j]='X';
}
}
}
};