#include <bits/stdc++.h>
using namespace std;
template <class T>
bool uin(T &a, T b) {
  return (a > b ? a = b, true : false);
}
template <class T>
bool uax(T &a, T b) {
  return (a < b ? a = b, true : false);
}
int const MAXN = 1e5 + 41;
int const MAXM = 5e5 + 41;
int const MAXB = 30;
int n, a[MAXN];
int tmp[MAXM];
int getmax(vector<int> &v) {
  int res = 0;
  for (int z : v) {
    uax(res, z);
  }
  return res;
}
void uniq(vector<int> &v) {
  int y = getmax(v);
  for (int i = 0; i <= y; ++i) {
    tmp[i] = 0;
  }
  for (int i = 0; i <= (int)(v.size()) - 1; ++i) {
    tmp[v[i]] = 1;
  }
  v.clear();
  for (int i = 1; i <= y; ++i) {
    if (tmp[i]) {
      v.push_back(i);
    }
  }
}
int p2[MAXB];
vector<int> rec(vector<int> a, vector<int> b, int d) {
  if ((int)(a.size()) == 0 && (int)(b.size()) == 0) {
    return vector<int>();
  }
  vector<int> res;
  if ((int)(a.size()) == 1 && (int)(b.size()) == 0 && a[0] == 1) {
    res.push_back(-p2[d]);
    return res;
  }
  if ((int)(a.size()) == 0 && (int)(b.size()) == 1 && b[0] == 1) {
    res.push_back(p2[d]);
    return res;
  }
  int qa = 0, qb = 0;
  for (int z : a) {
    qa += (z & 1);
  }
  for (int z : b) {
    qb += (z & 1);
  }
  if (!qa && !qb) {
    for (int i = 0; i <= (int)(a.size()) - 1; ++i) {
      a[i] >>= 1;
    }
    for (int i = 0; i <= (int)(b.size()) - 1; ++i) {
      b[i] >>= 1;
    }
    uniq(a);
    uniq(b);
    return rec(a, b, d + 1);
  }
  vector<int> r0, r1;
  {
    vector<int> a0, b0;
    for (int i = 0; i <= (int)(a.size()) - 1; ++i) {
      int x = a[i];
      if (x & 1) {
        x++;
      }
      x >>= 1;
      a0.push_back(x);
    }
    for (int i = 0; i <= (int)(b.size()) - 1; ++i) {
      int x = b[i];
      if (x & 1) {
        x--;
      }
      x >>= 1;
      b0.push_back(x);
    }
    uniq(a0);
    uniq(b0);
    r0 = rec(a0, b0, d + 1);
    r0.push_back(p2[d]);
  }
  {
    vector<int> a1, b1;
    for (int i = 0; i <= (int)(a.size()) - 1; ++i) {
      int x = a[i];
      if (x & 1) {
        x--;
      }
      x >>= 1;
      a1.push_back(x);
    }
    for (int i = 0; i <= (int)(b.size()) - 1; ++i) {
      int x = b[i];
      if (x & 1) {
        x++;
      }
      x >>= 1;
      b1.push_back(x);
    }
    uniq(a1);
    uniq(b1);
    r1 = rec(a1, b1, d + 1);
    r1.push_back(-p2[d]);
  }
  res = ((int)(r0.size()) < (int)(r1.size()) ? r0 : r1);
  return res;
}
void solve() {
  for (int i = 0; i <= MAXB - 1; ++i) {
    p2[i] = (1 << i);
  }
  vector<int> x, y;
  for (int i = 1; i <= n; ++i) {
    if (a[i] == 0) {
      continue;
    }
    if (a[i] < 0) {
      x.push_back(-a[i]);
    } else {
      y.push_back(a[i]);
    }
  }
  uniq(x);
  uniq(y);
  vector<int> ans = rec(x, y, 0);
  printf("%d\n", (int)(ans.size()));
  for (int z : ans) {
    printf("%d ", z);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
  }
  solve();
  return 0;
}
