```go
package main
import (
"bufio"
"fmt"
"os"
)
func readInt(r *bufio.Reader) (int, error) {
var n int
var b byte
var err error
for {
b, err = r.ReadByte()
if err != nil {
return 0, err
}
if b >= '0' && b <= '9' {
break
}
}
n = int(b - '0')
for {
b, err = r.ReadByte()
if err != nil || b < '0' || b > '9' {
return n, nil
}
n = n*10 + int(b-'0')
}
}
func writeInt(w *bufio.Writer, n int) {
if n == 0 {
w.WriteByte('0')
return
}
if n < 0 {
w.WriteByte('-')
n = -n
}
var buf [20]byte
i := 19
for n > 0 {
buf[i] = byte(n%10 + '0')
n /= 10
i--
}
w.Write(buf[i+1:])
}
func main() {
r := bufio.NewReader(os.Stdin)
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
n, err := readInt(r)
if err != nil {
return
}
p := make([]int, n)
for i := 0; i < n; i++ {
p[i], _ = readInt(r)
}
t, _ := readInt(r)
inQ := make([]bool, n)
for i := 0; i < t; i++ {
q, _ := readInt(r)
inQ[q-1] = true
}
ans := make([]int, n)
stack := make([]int, 0, n)
for i := n - 1; i >= 0; i-- {
if inQ[i] {
stack = append(stack, p[i])
ans[i] = -p[i]
} else {
if len(stack) > 0 && stack[len(stack)-1] == p[i] {
stack = stack[:len(stack)-1]
ans[i] = p[i]
} else {
stack = append(stack, p[i])
ans[i] = -p[i]
}
}
}
if len(stack) > 0 {
fmt.Fprintln(w, "NO")
} else {
fmt.Fprintln(w, "YES")
for i := 0; i < n; i++ {
writeInt(w, ans[i])
if i < n-1 {
w.WriteByte(' ')
}
}
w.WriteByte('\n')
}
}
```