#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
template <typename T1, typename T2>
inline bool upmax(T1& a, T2 b) {
  return (a < b ? (a = b, true) : false);
}
template <typename T1, typename T2>
inline bool upmin(T1& a, T2 b) {
  return (b < a ? (a = b, true) : false);
}
const int maxn = (int)3e5 + 22;
const int maxlog = 21;
const int base = (int)1e9 + 7;
const long double eps = (long double)1e-9;
const long double PI = acos(-1.);
const long long llinf = (long long)1e18 + 5;
const int inf = 2e9 + 5;
int main() {
  long long r = 0;
  ios_base::sync_with_stdio(0);
  int n;
  cin >> n;
  vector<long long> re;
  for (int i = 0; i < n / 2; i++) {
    long long x;
    cin >> x;
    long long fndf = llinf;
    for (int j = 1; 1ll * j * j <= x; j++) {
      if (x % j == 0) {
        long long q1 = j;
        long long q2 = x / j;
        long long second = q1 + q2;
        if (second % 2) continue;
        long long b = second / 2;
        long long a = q2 - b;
        if (a <= 0) continue;
        long long first = a * a - r;
        if (first <= 0) continue;
        if (first + x + r != b * b) {
          continue;
        }
        fndf = min(fndf, first);
      }
    }
    if (fndf == llinf) {
      cout << "No";
      return 0;
    }
    re.push_back(fndf);
    re.push_back(x);
    r += fndf;
    r += x;
  }
  cout << "Yes\n";
  for (auto e : re) cout << e << ' ';
  return 0;
}
