#include <bits/stdc++.h>
using namespace std;
vector<pair<long long, long long>> v;
unordered_map<long long, long long> m1;
unordered_map<long long, long long> m2;
long long fop1[(long long)1e5 + 10];
long long fop2[(long long)1e5 + 10];
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n;
  cin >> n;
  long long x;
  for (long long i = 0; i < n; i++) {
    cin >> x;
    v.push_back({x, i});
  }
  stable_sort(v.begin(), v.end());
  long long ans = (n - n / 3) / 2;
  for (long long i = 0; i < ans; i++) {
    fop1[v[i].second] = i;
    fop2[v[i].second] = v[i].first - i;
    m1[i]++;
    m2[v[i].first - i]++;
  }
  long long ro = 0;
  for (long long i = ans; i < ans * 2; i++) {
    fop1[v[i].second] = v[i].first - i;
    fop2[v[i].second] = i;
    m2[i]++;
    m1[v[i].first - i]++;
  }
  vector<long long> v1;
  vector<long long> v2;
  for (long long j = ans * 2; j < n; j++) {
    long long b = (n - 1) - j;
    m1[v[j].first - b]++;
    fop1[v[j].second] = v[j].first - b;
    v1.push_back(v[j].first - b);
    fop2[v[j].second] = b;
    m2[b]++;
    v2.push_back(b);
  }
  if (((n - (n + 2) / 3) <= m1.size()) && ((n - (n + 2) / 3) <= m2.size())) {
    cout << "YES" << endl;
    for (long long i = 0; i < n; i++) {
      cout << fop1[i] << " ";
    }
    cout << endl;
    for (long long i = 0; i < n; i++) {
      cout << fop2[i] << " ";
    }
    cout << endl;
    return 0;
  }
  cout << "NO" << endl;
  return 0;
}
