#include <bits/stdc++.h>
using namespace std;
long long x[100002];
vector<int> P[2 * 100002];
void NoSol() {
  printf("No\n");
  exit(0);
}
long long sqr(int x) { return 1LL * x * x; }
int bs(int x, long long val) {
  int i = -1, sz = P[x].size(), p = 1;
  while (p < sz) p <<= 1;
  while (p) {
    if (i + p < sz && sqr(P[x][i + p]) <= val) i += p;
    p >>= 1;
  }
  return i + 1;
}
int main() {
  int n;
  long long Xmax = 0;
  scanf("%d", &n);
  for (int i = 0; i < n / 2; ++i) {
    scanf("%lld", &x[i * 2 + 1]);
    Xmax = max(Xmax, x[i * 2 + 1]);
    if (x[i * 2 + 1] % 4 == 2) NoSol();
  }
  long long s = 0;
  for (int a = 1; a < Xmax; ++a)
    for (int b = a + 1; sqr(b) - sqr(a) <= Xmax; ++b)
      P[sqr(b) - sqr(a)].push_back(a);
  long long sum = 0;
  for (int i = 0; i < n / 2; ++i) {
    long long X = x[i * 2 + 1];
    if (P[X].empty()) NoSol();
    if (sqr(P[X].back()) <= sum) NoSol();
    x[i * 2] = sqr(P[X][bs(X, sum)]) - sum;
    sum = sum + x[i * 2] + X;
  }
  printf("Yes\n");
  s = 0;
  for (int i = 0; i < n; ++i) {
    printf("%lld ", x[i]);
    s += x[i];
    long long r = sqrt(s);
    if (r * r != s)
      while (1)
        ;
  }
  return 0;
}
