← Home
package main

import (
	"bufio"
	"io"
	"os"
	"strconv"
)

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

	n := int(nextInt())
	m := n / 2
	d := make([]int64, m)
	for i := 0; i < m; i++ {
		d[i] = nextInt()
	}

	ans := make([]int64, n)
	prev := int64(0)
	for i := 0; i < m; i++ {
		dd := d[i]
		best := int64(-1)
		for j := int64(1); j*j <= dd; j++ {
			if dd%j == 0 {
				p := j
				q := dd / j
				if ((p + q) & 1) == 0 {
					a := (q - p) / 2
					u := a * a
					if u > prev && (best == -1 || u < best) {
						best = u
					}
				}
			}
		}
		if best == -1 {
			w := bufio.NewWriter(os.Stdout)
			w.WriteString("No\n")
			w.Flush()
			return
		}
		ans[2*i] = best - prev
		ans[2*i+1] = dd
		prev = best + dd
	}

	w := bufio.NewWriter(os.Stdout)
	w.WriteString("Yes\n")
	for i := 0; i < n; i++ {
		if i > 0 {
			w.WriteByte(' ')
		}
		w.WriteString(strconv.FormatInt(ans[i], 10))
	}
	w.WriteByte('\n')
	w.Flush()
}