#include <bits/stdc++.h>
using namespace std;
long long add(long long a, long long b) {
  a += b;
  if (a >= 998244353) return a - 998244353;
  return a;
}
long long mul(long long a, long long b) {
  a *= b;
  if (a >= 998244353) return a % 998244353;
  return a;
}
vector<pair<long long, long long> > g[200002];
void init() {
  for (long long i = 1; i <= 200000; i++) {
    for (int j = 1; j * j < i; j++) {
      if (i % j == 0) {
        long long k = i / j;
        if (j % 2 == k % 2) {
          g[i].push_back({(k - j) * (k - j) / 4, (k + j) * (k + j) / 4});
        }
      }
    }
    sort(g[i].begin(), g[i].end());
  }
}
int n;
long long x[123456];
long long start_time;
bool dfs(int idx, long long sum) {
  if (idx == n + 1) return 1;
  long long y = x[idx + 1];
  for (auto e : g[y]) {
    x[idx] = e.first - sum;
    if (x[idx] > 0 && dfs(idx + 2, e.second)) return 1;
  }
  if ((clock() - start_time) / (CLOCKS_PER_SEC * 1.0) > 1.95) {
    cout << "No" << '\n';
    exit(0);
  }
  return 0;
}
int main() {
  start_time = clock();
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  init();
  cin >> n;
  for (int i = 2; i <= n; i += 2) cin >> x[i];
  if (dfs(1, 0) == 0) {
    cout << "No" << '\n';
  } else {
    cout << "Yes" << '\n';
    for (int i = 1; i <= n; i++) cout << x[i] << " ";
  }
  return 0;
}
