#include <bits/stdc++.h>
using namespace std;
const int maxn = 3300010;
const long long inf = 1e13;
long long p[maxn], a[maxn], b[maxn], ans[maxn], cnt, N;
int main() {
  for (long long i = 1;; i++) {
    if (i * i > inf) break;
    p[++cnt] = i * i;
  }
  bool F = true;
  scanf("%lld", &N);
  for (long long i = 1; i <= N / 2; i++) {
    scanf("%lld", &a[i]);
  }
  if (!F) return puts("No"), 0;
  long long BG = -1LL;
  for (long long i = 0; i <= cnt; i++) {
    long long pos = lower_bound(p + 1, p + cnt + 1, p[i] + a[1]) - p;
    if (pos >= 2 && p[pos] == p[i] + a[1]) {
      ans[1] = p[pos] - a[1];
      long long kk = lower_bound(p + 1, p + cnt + 1, ans[1]) - p;
      if (p[kk] == ans[1]) {
        BG = pos;
        break;
      }
    }
  }
  if (BG == -1LL) return puts("No"), 0;
  ans[2] = a[1];
  long long fcy = BG;
  for (long long i = 2; i <= N / 2 && fcy <= cnt; i++) {
    while (fcy <= cnt) {
      long long pos = lower_bound(p + 1, p + cnt + 1, p[fcy] + a[i]) - p;
      if (pos >= BG + 2 && p[pos] == p[fcy] + a[i]) {
        long long tmp = p[pos] - a[i];
        long long hhh = lower_bound(p + 1, p + cnt + 1, tmp) - p;
        if (p[hhh] == tmp) {
          ans[i * 2] = a[i];
          ans[i * 2 - 1] = p[pos] - p[BG] - a[i];
          BG = pos;
          fcy = BG;
          break;
        } else
          fcy++;
      } else
        fcy++;
    }
  }
  for (long long i = 1; i <= N; i++)
    if (ans[i] < 1LL || ans[i] > inf) return puts("No"), 0;
  puts("Yes");
  for (long long i = 1; i <= N; i++) printf("%lld ", ans[i]);
  return 0;
}
