classSolution{public:voidsolve(vector<vector<char>>&board){if(board.empty())return;constintm=board.size();constintn=board[0].size();constvector<int>dirs{0,1,0,-1,0};queue<pair<int,int>>q;for(inti=0;i<m;++i)for(intj=0;j<n;++j)if(i*j==0||i==m-1||j==n-1)if(board[i][j]=='O'){q.emplace(i,j);board[i][j]='*';}// Mark grids that stretch from four sides with '*'while(!q.empty()){constauto[i,j]=q.front();q.pop();for(intk=0;k<4;++k){constintx=i+dirs[k];constinty=j+dirs[k+1];if(x<0||x==m||y<0||y==n)continue;if(board[x][y]!='O')continue;q.emplace(x,y);board[x][y]='*';}}for(vector<char>&row:board)for(char&c:row)if(c=='*')c='O';elseif(c=='O')c='X';}};
classSolution{publicvoidsolve(char[][]board){if(board.length==0)return;finalintm=board.length;finalintn=board[0].length;finalint[]dirs={0,1,0,-1,0};Queue<int[]>q=newArrayDeque<>();for(inti=0;i<m;++i)for(intj=0;j<n;++j)if(i*j==0||i==m-1||j==n-1)if(board[i][j]=='O'){q.offer(newint[]{i,j});board[i][j]='*';}// Mark grids that stretch from four sides with '*'while(!q.isEmpty()){finalinti=q.peek()[0];finalintj=q.poll()[1];for(intk=0;k<4;++k){finalintx=i+dirs[k];finalinty=j+dirs[k+1];if(x<0||x==m||y<0||y==n)continue;if(board[x][y]!='O')continue;q.offer(newint[]{x,y});board[x][y]='*';}}for(char[]row:board)for(inti=0;i<row.length;++i)if(row[i]=='*')row[i]='O';elseif(row[i]=='O')row[i]='X';}}
classSolution:defsolve(self,board:List[List[str]])->None:ifnotboard:returnm=len(board)n=len(board[0])dirs=[0,1,0,-1,0]q=deque()foriinrange(m):forjinrange(n):ifi*j==0ori==m-1orj==n-1:ifboard[i][j]=='O':q.append((i,j))board[i][j]='*'# Mark grids that stretch from four sides with '*'whileq:i,j=q.popleft()forkinrange(4):x=i+dirs[k]y=j+dirs[k+1]ifx<0orx==mory<0ory==n:continueifboard[x][y]!='O':continueq.append((x,y))board[x][y]='*'forrowinboard:fori,cinenumerate(row):row[i]='O'ifc=='*'else'X'