#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
template <class c>
struct rge {
  c b, e;
};
template <class c>
rge<c> range(c i, c j) {
  return rge<c>{i, j};
}
template <class c>
auto dud(c* x) -> decltype(cerr << *x, 0);
template <class c>
char dud(...);
struct debug {
  template <class c>
  debug& operator<<(const c&) {
    return *this;
  }
};
using ll = long long;
using ld = long double;
constexpr int nax = 1000 * 1000 + 105;
constexpr int infty = 1000 * 1000 * 1000 + 5;
constexpr int mod = 1000 * 1000 * 1000 + 7;
template <typename T>
void Unique(vector<T>& v) {
  sort(v.begin(), v.end());
  v.resize(unique(v.begin(), v.end()) - v.begin());
}
vector<int> naj;
void Backtrack(const vector<int>& liczby, vector<int>& wynik, int pot) {
  debug() << "Backtrack("
             " ["
          << "liczby"
             ": "
          << (liczby)
          << "] "
             " ["
          << "wynik"
             ": "
          << (wynik)
          << "] "
             " ["
          << "pot"
             ": "
          << (pot)
          << "] "
             ")";
  if (liczby.empty()) {
    if (naj.size() > wynik.size()) {
      naj = wynik;
    }
    return;
  }
  bool jest_niep = false;
  for (int x : liczby) {
    if (x & 1) {
      jest_niep = true;
    }
  }
  if (!jest_niep) {
    vector<int> kopia;
    kopia.reserve(liczby.size());
    for (int x : liczby) {
      kopia.push_back(x / 2);
    }
    return Backtrack(kopia, wynik, pot * 2);
  }
  if (pot >= (1 << 20)) return;
  for (int co : {-1, 1}) {
    wynik.push_back(co * pot);
    vector<int> kopia;
    kopia.reserve(liczby.size());
    for (int x : liczby) {
      if (x & 1) {
        const int y = (x - co) / 2;
        if (y) kopia.push_back(y);
      } else {
        kopia.push_back(x / 2);
      }
    }
    Unique(kopia);
    Backtrack(kopia, wynik, pot * 2);
    wynik.pop_back();
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  for (int i = 0; i < 10000; i++) {
    naj.push_back(0);
  }
  vector<int> liczby;
  int n;
  cin >> n;
  while (n--) {
    int x;
    cin >> x;
    if (x) liczby.push_back(x);
  }
  Unique(liczby);
  vector<int> wynik;
  Backtrack(liczby, wynik, 1);
  printf("%d\n", (int)naj.size());
  for (int x : naj) {
    printf("%d ", x);
  }
  printf("\n");
  return 0;
}
