← Home
For problem statement at 0-999/700-799/730-739/730/problemH.txt this is a correct solution, but verifier at 0-999/700-799/730-739/730/verifierH.go ends with All tests passed can you fix the verifier? ```go
package main

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

func main() {
	in := bufio.NewReader(os.Stdin)

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

	files := make([]string, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &files[i])
	}

	del := make([]bool, n)
	var firstIdx int = -1
	for i := 0; i < m; i++ {
		var idx int
		fmt.Fscan(in, &idx)
		idx--
		del[idx] = true
		if firstIdx == -1 {
			firstIdx = idx
		}
	}

	base := files[firstIdx]
	L := len(base)

	for i := 0; i < n; i++ {
		if del[i] && len(files[i]) != L {
			fmt.Print("No")
			return
		}
	}

	pat := []byte(base)
	for pos := 0; pos < L; pos++ {
		ch := base[pos]
		ok := true
		for i := 0; i < n; i++ {
			if del[i] && files[i][pos] != ch {
				ok = false
				break
			}
		}
		if !ok {
			pat[pos] = '?'
		}
	}

	matches := func(pattern []byte, s string) bool {
		if len(s) != len(pattern) {
			return false
		}
		for i := 0; i < len(pattern); i++ {
			if pattern[i] != '?' && pattern[i] != s[i] {
				return false
			}
		}
		return true
	}

	for i := 0; i < n; i++ {
		isMatch := matches(pat, files[i])
		if del[i] {
			if !isMatch {
				fmt.Print("No")
				return
			}
		} else {
			if isMatch {
				fmt.Print("No")
				return
			}
		}
	}

	fmt.Println("Yes")
	fmt.Println(string(pat))
}
```