← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	if _, err := fmt.Fscan(reader, &t); err != nil {
		return
	}

	for tc := 0; tc < t; tc++ {
		var n, m int
		fmt.Fscan(reader, &n, &m)

		grid := make([]byte, n*m)
		for i := 0; i < n; i++ {
			var row string
			fmt.Fscan(reader, &row)
			copy(grid[i*m:], row)
		}

		degree := make([]int, n*m)
		q := make([]int, 0, n*m)

		for i := 0; i < n; i++ {
			for j := 0; j < m; j++ {
				idx := i*m + j
				ch := grid[idx]
				if ch == '.' || ch == 'L' {
					deg := 0
					if i > 0 && (grid[idx-m] == '.' || grid[idx-m] == 'L') {
						deg++
					}
					if i < n-1 && (grid[idx+m] == '.' || grid[idx+m] == 'L') {
						deg++
					}
					if j > 0 && (grid[idx-1] == '.' || grid[idx-1] == 'L') {
						deg++
					}
					if j < m-1 && (grid[idx+1] == '.' || grid[idx+1] == 'L') {
						deg++
					}
					degree[idx] = deg
					if ch == 'L' {
						q = append(q, idx)
					}
				}
			}
		}

		head := 0
		for head < len(q) {
			curr := q[head]
			head++

			i := curr / m
			j := curr % m

			if i > 0 {
				idx := curr - m
				if grid[idx] == '.' {
					degree[idx]--
					if degree[idx] <= 1 {
						grid[idx] = '+'
						q = append(q, idx)
					}
				}
			}
			if i < n-1 {
				idx := curr + m
				if grid[idx] == '.' {
					degree[idx]--
					if degree[idx] <= 1 {
						grid[idx] = '+'
						q = append(q, idx)
					}
				}
			}
			if j > 0 {
				idx := curr - 1
				if grid[idx] == '.' {
					degree[idx]--
					if degree[idx] <= 1 {
						grid[idx] = '+'
						q = append(q, idx)
					}
				}
			}
			if j < m-1 {
				idx := curr + 1
				if grid[idx] == '.' {
					degree[idx]--
					if degree[idx] <= 1 {
						grid[idx] = '+'
						q = append(q, idx)
					}
				}
			}
		}

		for i := 0; i < n; i++ {
			writer.Write(grid[i*m : (i+1)*m])
			writer.WriteByte('\n')
		}
	}
}