#include <bits/stdc++.h>
using namespace std;
vector<pair<long long, long long> > g[200010];
int a[200010];
long long b[200010];
int n;
int main() {
  scanf("%d", &n);
  int mx = 0;
  for (int i = 1; i <= n / 2; ++i) {
    scanf("%d", &a[i]);
    mx = max(mx, a[i]);
  }
  for (long long i = 1; i <= mx; ++i)
    for (long long j = i + 1; j * j - i * i <= mx; ++j)
      g[j * j - i * i].push_back(make_pair(i, j));
  long long last = 0;
  bool flag = true;
  for (int i = 1; i <= n / 2; ++i) {
    long long x = 0, y;
    for (pair<long long, long long> p : g[a[i]]) {
      x = p.first;
      y = p.second;
      if (x > last) break;
    }
    if (x <= last) {
      flag = false;
      break;
    }
    b[i * 2 - 1] = x * x - last * last;
    b[i * 2] = y * y - x * x;
    last = y;
  }
  if (flag) {
    puts("Yes");
    for (int i = 1; i <= n; ++i) printf("%lld ", b[i]);
  } else
    puts("No");
  return 0;
}
