← Home
```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')
	}
}
```