#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
template <class c>
struct rge {
  c b, e;
};
template <class c>
rge<c> range(c h, c n) {
  return {h, n};
}
template <class c>
auto dud(c* r) -> decltype(cerr << *r);
template <class c>
char dud(...);
struct muu {
  template <class c>
  muu& operator<<(const c&) {
    return *this;
  }
  muu& operator()() { return *this; }
};
const int N = 1e5 + 7;
long long tab[N];
int n;
long long inf = 1e18;
void fail() {
  printf("No\n");
  exit(0);
}
int main() {
  scanf("%d", &n);
  for (int i = 2; i <= n; i += 2) scanf("%lld", tab + i);
  long long sum = 0;
  for (int i = 2; i <= n; i += 2) {
    long long nsum = inf;
    for (int d = 1; d * d <= tab[i]; ++d) {
      if (tab[i] % d == 0) {
        long long a = (tab[i] / d) - d;
        long long b = (tab[i] / d) + d;
        if (a % 2 == 0 && b % 2 == 0) {
          if (a * a > 4 * sum) {
            nsum = min(nsum, (b * b) / 4);
          }
        }
      }
    }
    (muu() << __FUNCTION__ << "#" << 67 << ": ") << i << ' ' << nsum;
    if (nsum == inf) fail();
    tab[i - 1] = nsum - sum - tab[i];
    sum = nsum;
  }
  printf("Yes\n");
  for (int i = 1; i <= n; ++i) printf("%lld ", tab[i]);
  printf("\n");
  return 0;
}
