#include <bits/stdc++.h>
using namespace std;
bool cmp(long long x, long long y) { return x > y; }
long long n, a[500005], b[500005], sum[500005], pos[500005];
long long check(long long x) {
  for (long long i = 1; i <= n; i++) b[i] = a[i];
  b[n + 1] = x;
  for (int i = n + 1; i > 1; i--)
    if (b[i] > b[i - 1]) swap(b[i], b[i - 1]);
  for (long long i = 1; i <= n + 1; i++) sum[i] = sum[i - 1] + b[i];
  long long tot = 0;
  for (long long i = 1; i <= n + 1; i++) {
    tot += b[i];
    long long pos = upper_bound(b + 1, b + 1 + 1 + n, i, cmp) - b;
    if (tot > i * (i - 1) + max(pos - i - 1, 0LL) * i + sum[n + 1] -
                  sum[max(pos - 1, i)]) {
      if (b[i] <= x)
        return 1;
      else
        return -1;
    }
  }
  return 0;
}
int main() {
  long long tot = 0, flag = 0;
  scanf("%lld", &n);
  for (long long i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
    tot += a[i];
  }
  sort(a + 1, a + 1 + n, cmp);
  if (tot % 2) flag++;
  long long L = 0, R = n;
  while (L < R) {
    long long mid = (L + R) / 2;
    long long tmp = check(2 * mid + flag);
    if (tmp == -1)
      L = mid + 1;
    else if (tmp == 1)
      R = mid - 1;
    else
      R = mid;
  }
  if (check(2 * L + flag) != 0) {
    printf("-1\n");
    return 0;
  }
  long long ans1 = 2 * L + flag;
  L = 0, R = n;
  while (L < R) {
    long long mid = (L + R + 1) / 2;
    long long tmp = check(2 * mid + flag);
    if (tmp == -1)
      L = mid + 1;
    else if (tmp == 1)
      R = mid - 1;
    else
      L = mid;
  }
  long long ans2 = 2 * L + flag;
  for (long long i = ans1; i <= ans2; i += 2) {
    printf("%lld ", i);
  }
  return 0;
}
