// 思考レベル1: ビットごとの排他的論理和たらいう概念を理解 2つのビットのうちいずれかが1でいずれかが0
// 思考レベル2: 実験すると最下位ビットが立ってると奇数なので、自分が奇数のとき、両隣のうちいずれか片方が奇数で他方が偶数である必要がある。自分が偶数のとき、両方が奇数もしくは偶数である必要がある
// 並べると偶奇奇偶奇奇偶奇奇....で2/3が奇数、1/3が偶数になる。この場合は長さが3の倍数でなくてはならない
// あるいは偶偶偶偶偶偶偶...でぜんぶ偶数の場合である
// -> ここまでで提出したら4WA, まだなんかあるっぽい
// ためしてみると[2 1 3 2 1 3]はいいが[2 1 3 2 3 1]だと条件を満たさない
// -> 並べ方が固定される
// あと [2 3 1 4 3 1]も駄目 4のとこで最上位に立ったbitに対応する数は4~7である
// じゃあ2を6にして[6 3 1 4 3 1]としても当然6と4の最上位に立ったbitに対応する値が隣にないといけない
// というわけで[6 5 1 4 5 1]とすると今度は2位bit目であわなくなる
// ということは同じ数でないといけなさそう
// まとめると、登場する偶数は1種類、奇数は2種類であり、総数が偶:奇=1:2になっていないと駄目そう
// あるいはすべて同じ偶数,または0と0以外の同一の偶数が1:2

package main

import "fmt"

func main() {
	var N int
	fmt.Scan(&N)
	oddsT, evensT := make(map[int]int), make(map[int]int)
	evensBesidesZero := 0
	zero := 0
	for i := 0; i < N; i++ {
		var V int
		fmt.Scan(&V)
		if V%2 == 0 {
			evensT[V] += 1
			if V == 0 {
				zero += 1
			} else {
				evensBesidesZero += 1
			}
		} else {
			oddsT[V] += 1
		}
	}
	if len(oddsT) == 0 {
		if len(evensT) == 1 {
			fmt.Println("Yes")
		} else if len(evensT) == 2 {
			if 2*evensBesidesZero+zero == N {
				fmt.Println("Yes")
			} else {
				fmt.Println("No")
			}
		} else {
			fmt.Println("No")
		}
	} else {
		if len(evensT) > 1 {
			fmt.Println("No")
		} else if len(evensT) == 0 {
			fmt.Println("No") // 多分 奇数だけの場合の場合分け考えてなかったわ
		} else {
			if len(oddsT) != 2 {
				fmt.Println("No")
			} else {
				o := []int{}
				for _, v := range oddsT {
					o = append(o, v)
				}
				if o[0] == o[1] {
					fmt.Println("Yes")
				} else {
					fmt.Println("No")
				}
			}
		}
	}
}
