#include <bits/stdc++.h>
using namespace std;
const int N = 100005, inf = 1047483647;
int A[N * 20], i, j, k, n, m, an, s1, s2, d1, d2, D;
char c;
inline char getc() {
  static char s[10000000], *l = s, *r = s;
  if (l == r) l = s, r = s + fread(s, 1, 10000000, stdin);
  return l == r ? 0 : *l++;
}
int read() {
  int k = 1, z = 0;
  do c = getc();
  while ((c < '0' || c > '9') && c != '-');
  if (c == '-') k = -1, c = getc();
  while (c >= '0' && c <= '9') z *= 10, z += c - '0', c = getc();
  return k * z;
}
void solve(int *A, int H) {
  if (D >= an || H > 20) return;
  bool F = !(abs(A[1]) & 1);
  int g = 1;
  for (register int i = 2; i <= A[0]; F &= !(abs(A[i]) & 1), ++i)
    if (A[g] < A[i]) A[++g] = A[i];
  A[0] = g;
  if (g == 1 && !A[1]) {
    an = D, s1 = d1, s2 = d2;
    return;
  }
  if (F) {
    for (register int i = 1; i <= g; ++i) A[i] /= 2;
    solve(A, H + 1);
  } else {
    int *B = A + g + 1;
    B[0] = g;
    for (register int i = 1; i <= g; ++i)
      if (abs(A[i]) & 1)
        B[i] = (A[i] - 1) / 2;
      else
        B[i] = A[i] / 2;
    ++D, d1 |= 1 << H;
    d2 |= 1 << H;
    solve(B, H + 1);
    B[0] = g;
    d2 ^= 1 << H;
    for (register int i = 1; i <= g; ++i)
      if (abs(A[i]) & 1)
        B[i] = (A[i] + 1) / 2;
      else
        B[i] = A[i] / 2;
    solve(B, H + 1);
    --D, d1 ^= 1 << H;
  }
}
int main() {
  A[0] = n = read(), an = 21;
  for (i = 1; i <= n; ++i) A[i] = read();
  sort(A + 1, A + n + 1);
  solve(A, 0);
  printf("%d\n", an);
  for (i = 0; i <= 20; ++i)
    if (s1 >> i & 1) printf("%d ", (1 << i) * ((s2 >> i & 1) ? 1 : -1));
  return 0;
}
