package main import "fmt" func main() { var T int fmt.Scan(&T) for tc := 1; tc <= T; tc++ { var R, C int fmt.Scan(&R, &C) cake := make([][]byte, R) stop := make([][]bool, R) for i := 0; i < R; i++ { fmt.Scan(&cake[i]) stop[i] = make([]bool, C) for j, b := range cake[i] { stop[i][j] = b == '?' } } for r := 0; r < R; r++ { for c := 0; c < C; c++ { if stop[r][c] { continue } expand(cake, cake[r][c], R, C, r, c, r, c) } } fmt.Printf("Case #%d:\n", tc) for i := 0; i < R; i++ { fmt.Println(string(cake[i])) } } } // .--> x // | // | // v // y func expand(cake [][]byte, init byte, R, C, r1, c1, r2, c2 int) { isExpand := false for 0 < c1 { // Left i := r1 for ; i <= r2 && cake[i][c1-1] == '?'; i++ { } if i <= r2 { break } c1-- for i = r1; i <= r2; i++ { cake[i][c1] = init } isExpand = true } for 0 < r1 { // Up i := c1 for ; i <= c2 && cake[r1-1][i] == '?'; i++ { } if i <= c2 { break } r1-- for i := c1; i <= c2; i++ { cake[r1][i] = init } isExpand = true } for c2 < C-1 { // Right i := r1 for ; i <= r2 && cake[i][c2+1] == '?'; i++ { } if i <= r2 { break } c2++ for i = r1; i <= r2; i++ { cake[i][c2] = init } isExpand = true } for r2 < R-1 { // Down i := c1 for ; i <= c2 && cake[r2+1][i] == '?'; i++ { } if i <= c2 { break } r2++ for i = c1; i <= c2; i++ { cake[r2][i] = init } isExpand = true } if isExpand { expand(cake, init, R, C, r1, c1, r2, c2) } }