#include <bits/stdc++.h>
using namespace std;
template <class T>
using min_heap = priority_queue<T, vector<T>, greater<T> >;
void solve() {
  vector<long long> diff;
  for (int i = 1; i < 3 * 1e5; i++) {
    long long t1 = 2 * i - 1;
    diff.push_back(t1);
  }
  long long n;
  cin >> n;
  vector<long long> num(n / 2);
  for (int i = 0; i < n / 2; i++) cin >> num[i];
  int st = 0, en = 1, st2 = 1;
  long long pref = diff[1], pref2 = diff[0];
  bool isval = true;
  vector<long long> ans;
  for (int i = 0; i < n / 2; i++) {
    while (1) {
      if (st2 > en) {
        isval = false;
        break;
      }
      if (pref < num[i]) {
        en++;
        pref += diff[en];
      } else {
        if (pref > num[i]) {
          pref -= diff[st2];
          pref2 += diff[st2];
          st2++;
        } else {
          ans.push_back(pref2);
          ans.push_back(pref);
          st = en + 1;
          st2 = en + 2;
          en = en + 2;
          pref2 = diff[st];
          pref = diff[st2];
          break;
        }
      }
    }
  }
  if (isval) {
    cout << "Yes" << endl;
    for (int i = 0; i < ((int)(ans).size()); i++) {
      cout << ans[i] << " ";
    }
    cout << endl;
  } else
    cout << "No" << endl;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  auto start = std::chrono::high_resolution_clock::now();
  int t = 1;
  while (t--) {
    solve();
  }
  auto stop = std::chrono::high_resolution_clock::now();
  auto duration =
      std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start);
  return 0;
}
