package main import . "fmt" import . "strings" import . "sort" import "math/rand" func main() { var t int Scan(&t) for ; t > 0; t-- { var n int var s string Scan(&n,&s) Println(solve(n, s)) } } const H = "helloworld" var bh = []byte(H) func solve(n int, s string) string { if Contains(s, H) { return ReplaceAll(s, "?", "a") } b := []byte(s) ans := []string{} for i := len(b)-len(bh); i >= 0; i-- { ok := true for j, ch := range bh { if b[i+j] != '?' && b[i+j] != ch { ok = false break } } // コーナーケース // h?????????? // h??l??????? // WA hhelloworld // AC helloworlda if ok && i > 0 && b[i-1] == 'h' { dup := true for j, ch := range bh { if b[i-1+j] != '?' && b[i-1+j] != ch { dup = false break } } ok = !dup } if ok { x := []byte(s) for j, ch := range bh { x[i+j] = ch } ans = append(ans, ReplaceAll(string(x), "?", "a")) break } } if len(ans) > 0 { tmp := ans[0] Strings(ans) if tmp != ans[0] { println(tmp) println(ans[0]) panic("bug") } return ans[0] } return "-1" } func init() { // check() } func check() { for t := 0; t < 1000; t++ { n := rand.Intn(40)+30 b := make([]byte, n) for i := range b { c := rand.Intn(120) if c < 26 { b[i] = byte(c + 'a') } else { b[i] = '?' } } s := string(b) solve(n, s) } }