非常好些的BFS,注意一点是通过已知可以的点来扩展到未知但是可以的点
const int mod = 998244353,N=1e6+5;
int n,m;int row,col,sx,sy;
vector<char> g[N];map<pii,bool> vis;
int mov[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
queue<pii> Q;
bool check(pii poi){
int x = poi.x, y = poi.y; int num = 0;
for(int i=0;i<4;++i){
int xx = x+mov[i][0], yy = mov[i][1] + y;
if(xx<1||xx>n||yy<0||yy>=m) continue;
if(g[xx][yy] == '.') num++;
}
return num<=1;
}
void bfs(){
while(Q.size()) Q.pop();
Q.push({sx,sy});
while(Q.size()){
auto u=Q.front(); Q.pop();
int x = u.x, y = u.y;
if(vis[{x,y}]) continue;
vis[{x,y}] = true;
for(int k=0;k<4;++k){
int xx=x+mov[k][0],yy=mov[k][1]+y;
if(xx<1||xx>n||yy<0||yy>=m||g[xx][yy]=='#') continue;
if(g[xx][yy] == '.'){
if(!check({xx,yy})) continue;
g[xx][yy] = '+';
Q.push({xx,yy});
}
}
}
}
void solve(){
cin >> n >> m;
rep(i,1,n) { vis.clear(),g[i].clear();}
rep(i,1,n) rep(j,1,m) {
char ch; cin >> ch;
g[i].push_back(ch);
if(ch=='L') sx=i,sy=j-1;
}
// debug(n);debug(m);
bfs();
g[sx][sy] = 'L';
for(int i=1;i<=n;++i){
for(int j=0;j<m;++j){
cout << g[i][j];
}
puts("");
}
}
//=================================
int main(){
// FASTIO; cin.tie(0);
int _;
for(scanf("%d",&_);_;--_){
solve();
}
return 0;
}