package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	n := getInt()

	m := make(map[int]int, 3)
	for i := 0; i < n; i++ {
		tmp := getInt()
		m[tmp]++
		if len(m) > 3 {
			fmt.Println("No")
			return
		}
	}
	if len(m) <= 1 {
		fmt.Println("No")
		return
	}
	if n%3 != 0 {
		fmt.Println("No")
		return
	}

	if len(m) == 3 {
		for _, v := range m {
			if v != n/3 {
				fmt.Println("No")
				return
			}
		}
	} else if len(m) == 2 {
		vs := make([]int, 2)
		ks := make([]int, 2)
		i := 0
		for k, v := range m {
			vs[i] = v
			ks[i] = k
			i++
		}
		if max(vs...) != min(vs...)*2 {
			fmt.Println("No")
			return
		}
		if vs[0] < vs[1] {
			if ks[0] != 0 {
				fmt.Println("No")
				return
			}
		} else {
			if ks[1] != 0 {
				fmt.Println("No")
				return
			}
		}
	}

	fmt.Println("Yes")
}

func max(ns ...int) int {
	max := ns[0]
	for i := 1; i < len(ns); i++ {
		if max < ns[i] {
			max = ns[i]
		}
	}
	return max
}

func min(ns ...int) int {
	min := ns[0]
	for i := 1; i < len(ns); i++ {
		if min > ns[i] {
			min = ns[i]
		}
	}
	return min
}

// -----------------------------------------

var scanner = wordScanner()

func wordScanner() *bufio.Scanner {
	sc := bufio.NewScanner(os.Stdin)
	sc.Split(bufio.ScanWords)
	return sc
}

func getInt() int {
	scanner.Scan()
	i, err := strconv.Atoi(scanner.Text())
	if err != nil {
		panic(err)
	}
	return i
}

func getIntSlice(n int) []int {
	is := make([]int, n)
	for i := range is {
		is[i] = getInt()
	}
	return is
}

func getString() string {
	scanner.Scan()
	s := scanner.Text()
	return s
}
