← Home
package main

import (
	"io"
	"os"
)

func upperBound(a []int, x int) int {
	l, r := 0, len(a)
	for l < r {
		m := (l + r) >> 1
		if a[m] <= x {
			l = m + 1
		} else {
			r = m
		}
	}
	return l
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	nextInt := func() int {
		for idx < len(data) && (data[idx] < '0' || data[idx] > '9') && data[idx] != '-' {
			idx++
		}
		sign := 1
		if data[idx] == '-' {
			sign = -1
			idx++
		}
		val := 0
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			val = val*10 + int(data[idx]-'0')
			idx++
		}
		return sign * val
	}

	n := nextInt()
	m := nextInt()

	a := make([]int, m)
	for i := 0; i < m; i++ {
		a[i] = nextInt()
	}

	poss := make([]int, 0, n)
	hitsAt := make([]int, 0, n)
	vals := make([]byte, 0, n)

	curLen := 0
	totalHits := 0
	maxPos := 0

	for i := 0; i < n; i++ {
		e := nextInt()
		if e == -1 {
			curLen -= upperBound(a, curLen)
			totalHits++
		} else {
			p := curLen + 1
			if p > maxPos {
				maxPos = p
			}
			poss = append(poss, p)
			hitsAt = append(hitsAt, totalHits)
			if e == 0 {
				vals = append(vals, '0')
			} else {
				vals = append(vals, '1')
			}
			curLen++
		}
	}

	if len(poss) == 0 {
		os.Stdout.Write([]byte("Poor stack!\n"))
		return
	}

	capDeath := totalHits + 1
	death := make([]int, maxPos+1)
	a1 := a[0]
	j := 0
	cnt := 0

	for p := 1; p <= maxPos; p++ {
		isA := false
		if j < m && a[j] == p {
			isA = true
			cnt++
			j++
		}
		if p < a1 {
			death[p] = capDeath
		} else if isA {
			death[p] = 1
		} else {
			q := p - cnt
			d := death[q]
			if d >= capDeath {
				death[p] = capDeath
			} else {
				d++
				if d > capDeath {
					d = capDeath
				}
				death[p] = d
			}
		}
	}

	res := make([]byte, 0, len(vals))
	for i := 0; i < len(vals); i++ {
		if totalHits-hitsAt[i] < death[poss[i]] {
			res = append(res, vals[i])
		}
	}

	if len(res) == 0 {
		os.Stdout.Write([]byte("Poor stack!\n"))
	} else {
		res = append(res, '\n')
		os.Stdout.Write(res)
	}
}