func_code_string: #include <bits/stdc++.h>   using namespace std;   const double pi = acos(-1.0);   const int N = 5000000;   const double eps = 1e-6;   int n, l, m, k, a[N], rev[N], res[N];   bool used[N];   complex<double> b[N], tmp[N];   pair<int, int> p[N];   vector<int> ans;   void fft(bool invert) {     for (int i = 0; i < l; i++) tmp[rev[i]] = b[i];     for (int i = 0; i < l; i++) b[i] = tmp[i];     for (int r = 1; r <= k; r++) {       for (int i = 0; i < l; i += (1 << r)) {         for (int j = i; j < i + (1 << (r - 1)); j++) {           double ang;           if (!invert)             ang = 2.0 * (j - i) * pi / (1 << r);           else             ang = -2.0 * (j - i) * pi / (1 << r);           complex<double> w(cos(ang), sin(ang));           complex<double> t1 = b[j], t2 = b[j + (1 << (r - 1))];           b[j] = t1 + w * t2;           b[j + (1 << (r - 1))] = t1 - w * t2;         }       }     }     if (invert) {       for (int i = 0; i < l; i++) b[i] /= l;     }   }   int main() {     scanf( %d%d , &n, &m);     memset(used, false, sizeof(used));     for (int i = 0; i < n; i++) scanf( %d , &a[i]);     for (int i = 0; i < n; i++) used[a[i]] = true;     m++;     l = 1;     k = 0;     for (int i = 1; i <= 20; i++)       if (l < m) {         l *= 2;         k++;       } else         break;     l *= 2;     k++;     for (int i = 0; i < n; i++) b[a[i]] = complex<double>(1, 0);     for (int i = 0; i < l; i++) {       int mask = 0;       for (int j = 0; j < k; j++)         if (i & (1 << j)) mask |= 1 << (k - j - 1);       rev[i] = mask;     }     fft(0);     for (int i = 0; i < l; i++) b[i] *= b[i];     fft(1);     for (int i = 0; i < l; i++) res[i] = b[i].real() + 0.5;     for (int i = 1; i < m; i++) {       if ((!res[i]) && (used[i]))         ans.push_back(i);       else if ((res[i]) && (!used[i])) {         cout <<  NO ;         return 0;       }     }     cout <<  YES  << endl;     printf( %d n , ans.size());     for (int i = 0; i < ans.size(); i++) printf( %d  , ans[i]);     return 0;   }   