#include <bits/stdc++.h>
#pragma GCC optimize("O500")
#pragma comment(linker, "/STACK:1677777216")
#pragma warning(default : 4)
using namespace std;
const double eps = 1e-12;
const int oo = 0x3F3F3F3F;
const long long ooLL = 0x3F3F3F3F3F3F3F3FLL;
const int MOD = 1000000007;
template <typename T>
T sqr(T x) {
  return x * x;
}
template <typename T>
void debpr(const T &);
template <typename T1, typename T2>
void debpr(const pair<T1, T2> &);
template <typename T1, typename T2>
void debpr(const vector<T1, T2> &);
template <typename T>
void debpr(const set<T> &);
template <typename T1, typename T2>
void debpr(const map<T1, T2> &);
template <typename T>
void prcont(T be, T en, const string &st, const string &fi, const string &mi) {
  debpr(st);
  bool ft = 0;
  while (be != en) {
    if (ft) debpr(mi);
    ft = 1;
    debpr(*be);
    ++be;
  }
  debpr(fi);
}
template <typename T>
void debpr(const T &a) {}
template <typename T1, typename T2>
void debpr(const pair<T1, T2> &p) {
  debpr("(");
  debpr(p.first);
  debpr(", ");
  debpr(p.second);
  debpr(")");
}
template <typename T1, typename T2>
void debpr(const vector<T1, T2> &a) {
  prcont(a.begin(), a.end(), "[", "]", ", ");
}
template <typename T>
void debpr(const set<T> &a) {
  prcont(a.begin(), a.end(), "{", "}", ", ");
}
template <typename T1, typename T2>
void debpr(const map<T1, T2> &a) {
  prcont(a.begin(), a.end(), "{", "}", ", ");
}
void deb(){};
template <typename T1>
void deb(const T1 &t1) {
  debpr(t1);
  debpr('\n');
}
template <typename T1, typename T2>
void deb(const T1 &t1, const T2 &t2) {
  debpr(t1);
  debpr(' ');
  debpr(t2);
  debpr('\n');
}
template <typename T1, typename T2, typename T3>
void deb(const T1 &t1, const T2 &t2, const T3 &t3) {
  debpr(t1);
  debpr(' ');
  debpr(t2);
  debpr(' ');
  debpr(t3);
  debpr('\n');
}
template <typename T1, typename T2, typename T3, typename T4>
void deb(const T1 &t1, const T2 &t2, const T3 &t3, const T4 &t4) {
  debpr(t1);
  debpr(' ');
  debpr(t2);
  debpr(' ');
  debpr(t3);
  debpr(' ');
  debpr(t4);
  debpr('\n');
}
const double PI = acos(-1.);
long long Round(double x) { return x < 0 ? x - .5 : x + .5; }
template <typename T>
void ass(bool v, const T &x, string m = "Fail") {
  if (!v) {
    deb(m);
    deb(x);
    throw;
  }
}
int main() {
  void run();
  run();
  return 0;
}
int n, a[1 << 17], d[1 << 17];
void run() {
  scanf("%d", &n);
  if (n == 1) return void(puts("-1"));
  vector<int> r;
  for (int i = (0), _b(n); i < _b; ++i) scanf("%d", &a[i]);
  sort(a, a + n);
  if (n == 2) {
    r.push_back(a[1] + a[1] - a[0]);
    r.push_back(a[0] - a[1] + a[0]);
    if ((a[0] + a[1]) % 2 == 0) r.push_back((a[0] + a[1]) / 2);
  } else {
    for (int i = (0), _b(n - 1); i < _b; ++i) d[i] = a[i + 1] - a[i];
    map<int, int> m;
    for (int i = (0), _b(n - 1); i < _b; ++i) ++m[d[i]];
    if (m.size() == 1) {
      r.push_back(a[n - 1] + d[0]);
      r.push_back(a[0] - d[0]);
    }
    for (int i = (0), _b(n - 1); i < _b; ++i) {
      if (m[d[i]] > 1 || d[i] % 2) continue;
      m.erase(d[i]);
      if (m.size() == 1 && m.begin()->first == d[i] / 2) {
        r.push_back(a[i] + d[i] / 2);
      }
      m[d[i]] = 1;
    }
  }
  sort((r).begin(), (r).end());
  r.erase(unique((r).begin(), (r).end()), r.end());
  printf("%d\n", int(r.size()));
  for (int i = (0), _b(r.size()); i < _b; ++i)
    printf("%d%c", r[i], i + 1 == r.size() ? '\n' : ' ');
  int p = 0;
}
