#include <bits/stdc++.h>
using namespace std;
struct cmp {
  inline bool operator()(const int& a, const int& b) const { return a > b; }
};
int n, d[500100], inc[500100];
long long pre[500100], suf[500100], low[500100], high[500100];
inline long long calc(int i, int k) {
  int x = upper_bound(inc + 1, inc + n + 1, k) - inc;
  int p = max(i, n - x + 2);
  return 1LL * (p - i) * k + suf[p];
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    cin >> d[i];
    inc[i] = d[i];
  }
  sort(inc + 1, inc + n + 1);
  sort(d + 1, d + n + 1, cmp());
  pre[0] = suf[n + 1] = 0;
  for (int i = 1; i <= n; ++i) pre[i] = pre[i - 1] + d[i];
  for (int i = n; i; --i) suf[i] = suf[i + 1] + d[i];
  for (int i = 1; i <= n; ++i) {
    low[i] = pre[i] - 1LL * i * (i - 1) - calc(i + 1, i);
    high[i] = 1LL * i * (i + 1) + calc(i + 1, i + 1) - pre[i];
  }
  low[0] = 0, high[n + 1] = n + 1;
  for (int i = 1; i <= n; ++i) low[i] = max(low[i], low[i - 1]);
  for (int i = n; i; --i) high[i] = min(high[i], high[i + 1]);
  vector<int> ret;
  int deg;
  if (pre[n] & 1)
    deg = 1;
  else
    deg = 0;
  for (int candidate = deg; candidate <= n; candidate += 2) {
    int x = upper_bound(inc + 1, inc + n + 1, candidate) - inc;
    int p = n - x + 2;
    if (low[p - 1] > candidate) continue;
    if (high[p] < candidate) continue;
    if (pre[p - 1] + candidate > 1LL * p * (p - 1) + calc(p, p)) continue;
    ret.emplace_back(candidate);
  }
  if (ret.empty())
    cout << -1 << endl;
  else {
    for (auto x : ret) cout << x << " ";
    cout << endl;
  }
  return 0;
}
