#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void setmin(T &x, T y) {
  if (y < x) x = y;
}
template <typename T>
inline void setmax(T &x, T y) {
  if (y > x) x = y;
}
template <typename T>
inline T gcd(T a, T b) {
  while (b) swap(a %= b, b);
  return a;
}
const int MAX = 1e6 + 7;
const int T = 1 << 20;
const int INF = 1e9 + 7;
const int MOD = 998244353;
const long long BIG_INF = 1e18 + 5;
long double e = 2.7182818284590452353602874713526624;
long double PI = acos(-1);
long double eps = 1e-14;
long long n, m, suma;
string a;
vector<int> tab = {INF};
int sprawdz(int stopien) {
  vector<int> nowy;
  bool dodano = 0;
  long long poz = 0;
  for (int i = 0; i < int((tab).size()); i++) {
    if (tab[i] <= stopien && !dodano) {
      nowy.push_back(stopien);
      dodano = 1;
    }
    if (!dodano) poz++;
    nowy.push_back(tab[i]);
  }
  if (!dodano) nowy.push_back(stopien);
  long long lewo = 0;
  long long prawo = 0;
  long long id = n + 1;
  long long lewko = 0;
  long long prawko = 0;
  for (long long i = 1; i <= n + 1; i++) {
    lewo += nowy[i];
    while (nowy[id] < i) {
      id--;
    }
    prawo += max(id - i + 1, (long long)0);
    prawo -= min(i, (long long)nowy[i]);
    prawo += i * (i - 1);
    if (prawo < lewo) {
      if (i >= poz)
        lewko = 1;
      else
        prawko = 1;
      if (prawko && lewko) {
        cout << -1;
        exit(0);
      }
    }
    prawo -= i * (i - 1);
  }
  return lewko ? 1 : prawko ? 0 : 2;
}
int znajdz_prawo(int pocz, int kon) {
  if (kon - pocz == 2) return pocz;
  int mid = (pocz + kon) / 2;
  if ((mid ^ pocz) & 1) mid--;
  int wyn = sprawdz(mid);
  if (wyn == 2 || wyn == 0) return znajdz_prawo(mid, kon);
  return znajdz_prawo(pocz, mid);
}
int znajdz_lewo(int pocz, int kon) {
  if (kon - pocz == 2) return kon;
  int mid = (pocz + kon) / 2;
  if ((mid ^ pocz) & 1) {
    mid++;
  }
  int wyn = sprawdz(mid);
  if (wyn == 2 || wyn == 1) return znajdz_lewo(pocz, mid);
  return znajdz_lewo(mid, kon);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n;
  suma = 0;
  for (int i = 0; i < n; i++) {
    int temp;
    cin >> temp;
    suma += temp;
    tab.push_back(temp);
  }
  sort((tab).rbegin(), (tab).rend());
  if (suma % 2 == 0) {
    int pom = (n & 1 ? n - 1 : n);
    int prawo = znajdz_prawo(0, pom + 2);
    int lewo = znajdz_lewo(-2, pom);
    for (int i = lewo; i <= prawo; i += 2) cout << i << ' ';
    if (lewo > prawo) cout << -1;
  } else {
    int pom = (n & 1 ? n : n - 1);
    int prawo = znajdz_prawo(1, pom + 2);
    int lewo = znajdz_lewo(-1, pom);
    for (int i = lewo; i <= prawo; i += 2) cout << i << ' ';
    if (lewo > prawo) cout << -1;
  }
}
