const input = require("fs").readFileSync("/dev/stdin", "utf8");
// const input = `3
// 1 2 3`;

const lines = input.split('\n').filter(Boolean);
const N = +lines[0];
const numbers = lines[1].split(' ').filter(Boolean).map(Number).slice(0, N);

console.log(isValid() ? 'Yes' : 'No');

function isValid() {
  // 全部0ならOK
  if (numbers.every((n) => n === 0)) {
    return true;
  }

  // 登場する数がいくつあるかカウントする
  // [0, 0, 1, 1, 1] => { '0': 2, '1': 3 }
  const unique = {};
  // 登場する数のユニークな数4を超えたらNG
  var count = 0;

  for (var i = 0, l = numbers.length; i < l; i+= 1) {
    var number = numbers[i];
    // まだカウントしてない数だったら
    if (unique[number] == null) {
      count += 1;
      // 4超えたのでNG
      if (count > 3) {
        return false;
      }
      // 初めて出た数なので初期値設定する
      unique[number] = 0;
    }

    // カウントアップする
    unique[number] += 1;
  }

  // ユニークな数ごとの登場回数
  // { '0': 2, '1': 3 } => [2, 3]
  const uniques = Object.keys(unique).map(Number);
  const counts = uniques.map((key) => unique[key]);

  // 2種類しかない場合は0を含んでいる必要がある
  if (counts.length === 2 && unique[0] != null) {
    // 2種類の場合は[0, 1, 1]とか1:2の個数になる
    return (
      counts[0] === counts[1] * 2 && uniques[0] === 0 ||
      counts[0] * 2 === counts[1] && uniques[1] === 0
    );
  }

  // 3種類の場合は登場回数が等しい
  // かつ
  // 排他的論理和になってる
  if (counts.length === 3) {
    return (
      counts[0] === counts[1] && counts[1] === counts[2] &&
      uniques[0] ^ uniques[1] === uniques[2]
    );
  }

  return false;
}
