```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))
}
```