func_code_string: #include <bits/stdc++.h>   #pragma GCC target( avx2 )   using namespace std;   const int N = 1e3 + 7;   const int SZ = 1e6 * 14;   int val[SZ];   pair<int, int> ans;   int A[N], X[N], vis[N], maxind;   void solve(int need, int pos, int mask = 0, int sum = 0) {     if (pos > maxind) {       if (need != 0) return;       if (val[sum])         ans = {val[sum], mask};       else         val[sum] = mask;       return;     }     solve(need - 1, pos + 1, (mask << 1) + 1, sum + A[pos]);     solve(need, pos + 1, (mask << 1), sum);   }   void solve() {     int n;     cin >> n;     maxind = min(26, n);     int cnt[2] = {0, 0};     for (int i = 1; i <= n; ++i) {       cin >> A[i];       cnt[A[i] & 1]++;     }     if (n == 2) {       if (A[1] == A[2])         cout <<  YES n0   << A[1] <<   n ;       else         cout <<  NO n ;       return;     }     if (cnt[0] >= 3 || (cnt[0] && cnt[1] >= 2)) {       vector<int> V;       if (cnt[0] >= 3) {         for (int i = 1; i <= n; ++i) {           if (A[i] & 1) continue;           V.push_back(A[i]);           vis[i] = 1;           if (V.size() == 3) break;         }       } else {         for (int i = 1; i <= n; ++i) {           if (!(A[i] & 1)) {             V.push_back(A[i]);             vis[i] = 1;             break;           }         }         for (int i = 1; i <= n; ++i) {           if (A[i] & 1) V.push_back(A[i]), vis[i] = 1;           if (V.size() == 3) break;         }       }       assert(V.size() == 3);       X[1] = (V[0] + V[2] - V[1]) >> 1;       X[2] = V[0] - X[1];       X[3] = V[2] - X[1];       int ptr = 4;       for (int i = 1; i <= n; ++i) {         if (vis[i]) continue;         X[ptr++] = A[i] - X[1];       }       cout <<  YES n ;       for (int i = 1; i <= n; ++i) cout << X[i] <<    ;       cout <<   n ;       return;     }     for (int s = 1; s <= (n >> 1); ++s) {       solve(s, 1);       if (ans == pair<int, int>{0, 0}) {         memset(val, 0, sizeof(val));         continue;       }       vector<int> V1, V2;       for (int i = 1; i <= maxind; ++i) {         if ((1 << (maxind - i)) & ans.first) V1.push_back(A[i]), vis[i] = 1;         if ((1 << (maxind - i)) & ans.second) V2.push_back(A[i]), vis[i] = 1;       }       vector<int> V;       for (int i = 0; i < s; ++i) {         V.push_back(V1[i]);         V.push_back(V2[i]);       }       X[1] = 0;       for (int i = 2; i <= (s << 1); ++i) {         X[i] = V[i - 2] - X[i - 1];       }       assert(X[1] + X[s << 1] == V[(s << 1) - 1]);       int ptr = s * 2 + 1;       for (int i = 1; i <= n; ++i) {         if (vis[i]) continue;         X[ptr++] = A[i] - X[1];       }       cout <<  YES n ;       for (int i = 1; i <= n; ++i) cout << X[i] <<    ;       cout <<   n ;       return;     }     cout <<  NO n ;   }   signed main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     int t = 1;     while (t--) solve();   }   