```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
scanner.Scan()
n, _ := strconv.Atoi(scanner.Text())
arr := make([]int, n)
for i := 0; i < n; i++ {
scanner.Scan()
arr[i], _ = strconv.Atoi(scanner.Text())
}
sort.Ints(arr)
for i := 1; i < n; i++ {
if arr[i]-arr[i-1] > 1 {
fmt.Println("NO")
return
}
}
min := arr[0]
max := arr[n-1]
if min == max {
fmt.Println("NO")
return
}
k := max - min + 1
f := make([]int, k)
j := 0
for i := 0; i < n; i++ {
if arr[i] == min+j {
f[j]++
} else {
j++
if j >= k || arr[i] != min+j {
fmt.Println("NO")
return
}
f[j]++
}
}
if f[0] > f[1] || f[k-1] > f[k-2] {
fmt.Println("NO")
return
}
x := 2 * f[0]
for i := 1; i < k-1; i++ {
x = 2*f[i] - x
if x <= 0 {
fmt.Println("NO")
return
}
}
if x == 2*f[k-1] {
fmt.Println("YES")
} else {
fmt.Println("NO")
}
}
```