func_code_string: #include <bits/stdc++.h>   using namespace std;   int get() {     char ch;     while (ch = getchar(), (ch <  0  || ch >  9 ) && ch !=  - )       ;     if (ch ==  - ) {       int s = 0;       while (ch = getchar(), ch >=  0  && ch <=  9 ) s = s * 10 + ch -  0 ;       return -s;     }     int s = ch -  0 ;     while (ch = getchar(), ch >=  0  && ch <=  9 ) s = s * 10 + ch -  0 ;     return s;   }   const int N = 100005;   const int L = 262144;   int n, a[N];   int d[20][N];   int ans[40];   int key[40];   void dfs(int x) {     if (d[x - 1][0] == 1) {       if (d[x - 1][1] != 0) return;       if (key[0] < ans[0]) {         ans[0] = key[0];         for (int i = 1; i <= key[0]; i++) ans[i] = key[i];       }       return;     }     int mv = 1 << 19;     for (int i = 1; i <= d[x - 1][0]; i++) {       int v = abs(d[x - 1][i]);       if ((v & -v) > 0) mv = min(mv, v & -v);     }     if (mv == (1 << 19)) return;     key[++key[0]] = mv;     d[x][0] = 0;     for (int i = 1; i <= d[x - 1][0]; i++) {       if ((d[x - 1][i] & mv) > 0)         d[x][++d[x][0]] = d[x - 1][i] - mv;       else         d[x][++d[x][0]] = d[x - 1][i];     }     sort(d[x] + 1, d[x] + 1 + d[x][0]);     int k = 1;     for (int i = 2; i <= d[x][0]; i++)       if (d[x][i] != d[x][i - 1]) d[x][++k] = d[x][i];     d[x][0] = k;     dfs(x + 1);     key[key[0]] = -mv;     d[x][0] = 0;     for (int i = 1; i <= d[x - 1][0]; i++) {       if ((d[x - 1][i] & mv) > 0)         d[x][++d[x][0]] = d[x - 1][i] + mv;       else         d[x][++d[x][0]] = d[x - 1][i];     }     sort(d[x] + 1, d[x] + 1 + d[x][0]);     k = 1;     for (int i = 2; i <= d[x][0]; i++)       if (d[x][i] != d[x][i - 1]) d[x][++k] = d[x][i];     d[x][0] = k;     dfs(x + 1);     key[0]--;   }   int main() {     n = get();     for (int i = 1; i <= n; i++) a[i] = get();     ans[0] = 100;     a[++n] = 0;     sort(a + 1, a + 1 + n);     int n_ = 1;     for (int i = 2; i <= n; i++)       if (a[i] != a[i - 1]) a[++n_] = a[i];     n = n_;     for (int i = 1; i <= n; i++) d[0][i] = a[i];     d[0][0] = n;     dfs(1);     printf( %d n , ans[0]);     for (int i = 1; i <= ans[0]; i++) printf( %d  , ans[i]);     return 0;   }   