func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   bool ckmax(T& x, T y) {     return x < y ? x = y, 1 : 0;   }   template <class T>   bool ckmin(T& x, T y) {     return x > y ? x = y, 1 : 0;   }   inline long long read() {     long long x = 0, f = 1;     char ch = getchar();     while (!isdigit(ch)) {       if (ch ==  - ) f = 0;       ch = getchar();     }     while (isdigit(ch)) x = x * 10 + ch -  0 , ch = getchar();     return f ? x : -x;   }   const long long N = 200005;   long long n, a[N], b[N], now, tot;   bool isrt(long long x) {     if (x > 1e13) return 0;     long long l = max(1ll, (long long)(sqrt(x) - 3)), r = sqrt(x) + 3;     for (long long i = l, iend = r; i <= iend; ++i)       if (x % i == 0) return 1;     return 0;   }   signed main() {     n = read() / 2;     for (long long i = 1, iend = n; i <= iend; ++i) a[i] = read();     for (long long i = 1; i <= n; ++i) {       bool flg = 0;       long long res;       for (long long j = sqrt(a[i]); j >= 1; --j) {         if (a[i] % j) continue;         long long X = a[i] / j, Y = j;         if ((X - Y) % 2) continue;         res = (X - Y) / 2, res *= res;         if (res <= now) continue;         flg = 1;         break;       }       if (now >= res || !flg) return puts( No ), 0;       b[++tot] = res - now, b[++tot] = a[i];       now = a[i] + res;     }     now = 0;     for (long long i = 1, iend = n << 1; i <= iend; ++i) {       now += b[i];       if (!isrt(now)) return puts( No ), 0;     }     puts( Yes );     for (long long i = 1, iend = n << 1; i <= iend; ++i) printf( %lld  , b[i]);     puts(  );     return 0;   }   