#include <bits/stdc++.h>
using namespace std;
inline bool cmp(int a, int b) { return a < b; }
long long a[100001];
vector<long long> ans;
set<long long> set_;
int main() {
  int n;
  scanf("%d", &n);
  int i;
  for (i = 0; i < n; i++) {
    scanf("%I64d", &a[i]);
  }
  sort(a, a + n, cmp);
  if (n == 1) {
    puts("-1");
    return 0;
  }
  if (n == 2) {
    ans.push_back(a[0] - (a[1] - a[0]));
    ans.push_back(a[1] + (a[1] - a[0]));
    for (i = a[0] + 1; i < a[1]; i++) {
      if (i - a[0] == a[1] - i) {
        ans.push_back(i);
      }
    }
    sort(ans.begin(), ans.end(), cmp);
    ans.erase(unique(ans.begin(), ans.end()), ans.end());
    printf("%d\n", ans.size());
    for (i = 0; i < ans.size(); i++) {
      printf("%I64d %s", ans[i], "");
    }
    return 0;
  }
  vector<long long> b;
  vector<long long> c;
  for (i = 1; i < n; i++) {
    b.push_back(a[i] - a[i - 1]);
    c.push_back(a[i] - a[i - 1]);
  }
  sort(c.begin(), c.end(), cmp);
  c.erase(unique(c.begin(), c.end()), c.end());
  if (c.size() == 1) {
    ans.push_back(a[0] - (a[1] - a[0]));
    ans.push_back(a[n - 1] + (a[1] - a[0]));
    sort(ans.begin(), ans.end(), cmp);
    ans.erase(unique(ans.begin(), ans.end()), ans.end());
    printf("%d\n", ans.size());
    for (i = 0; i < ans.size(); i++) {
      printf("%I64d %s", ans[i], "");
    }
    return 0;
  }
  if (c.size() > 2) {
    puts("0");
    return 0;
  }
  int cnt1 = 0, cnt2 = 0;
  for (i = 0; i < b.size(); i++) {
    if (b[i] == c[0]) {
      cnt1++;
    } else {
      cnt2++;
    }
  }
  if ((min(cnt1, cnt2) > 1 && max(cnt1, cnt2) > 1) && cnt1 != cnt2) {
    puts("0");
    return 0;
  } else {
    if (cnt1 == cnt2 && cnt1 > 1) {
      puts("0");
      return 0;
    }
  }
  if (cnt1 > cnt2) {
    for (i = 1; i < n; i++) {
      if (a[i] - a[i - 1] == c[1]) {
        if (a[i] - c[0] == a[i - 1] + c[0] && a[i] - c[0] > a[i - 1] &&
            a[i - 1] + c[0] < a[i]) {
          ans.push_back(a[i - 1] + c[0]);
        }
      }
    }
  } else {
    if (cnt1 < cnt2) {
      for (i = 1; i < n; i++) {
        if (a[i] - a[i - 1] == c[0]) {
          if (a[i] - c[1] == a[i - 1] + c[1] && a[i - 1] + c[1] &&
              a[i] - c[1] > a[i - 1] && a[i - 1] + c[1] < a[i]) {
            ans.push_back(a[i - 1] + c[1]);
          }
        }
      }
    } else {
      for (i = 1; i < n; i++) {
        if (a[i] - a[i - 1] == c[1]) {
          if (a[i] - c[0] == a[i - 1] + c[0] && a[i] - c[0] > a[i - 1] &&
              a[i - 1] + c[0] < a[i]) {
            ans.push_back(a[i - 1] + c[0]);
          }
        }
      }
      for (i = 1; i < n; i++) {
        if (a[i] - a[i - 1] == c[0]) {
          if (a[i] - c[1] == a[i - 1] + c[1] && a[i - 1] + c[1] &&
              a[i] - c[1] > a[i - 1] && a[i - 1] + c[1] < a[i]) {
            ans.push_back(a[i - 1] + c[1]);
          }
        }
      }
    }
  }
  sort(ans.begin(), ans.end(), cmp);
  ans.erase(unique(ans.begin(), ans.end()), ans.end());
  printf("%d\n", ans.size());
  for (i = 0; i < ans.size(); i++) {
    printf("%I64d %s", ans[i], "");
  }
  return 0;
}
