#include <bits/stdc++.h>
using namespace std;
int n, k, sum, ans, m, t, sa, sb, ex, ey, dx, dy;
char temp;
struct point {
  int val;
  int ind;
};
struct pnt {
  int val;
  int ind;
};
point s[100005];
pnt a[100005];
pnt b[100005];
int aa[100005];
int bb[100005];
bool operator<(point mek, point erku) { return mek.val < erku.val; }
bool operator<(pnt mek, pnt erku) { return mek.ind < erku.ind; }
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> k;
    point tt;
    tt.val = k;
    tt.ind = i;
    s[i] = tt;
  }
  sort(s, s + n);
  for (int i = 0; i < (n + 2) / 3; i++) {
    pnt tt1;
    tt1.ind = s[i].ind;
    tt1.val = i;
    a[i] = tt1;
    pnt tt2;
    tt2.ind = s[i].ind;
    tt2.val = s[i].val - tt1.val;
    b[i] = tt2;
  }
  for (int i = n / 3; i < n - (n + 2) / 3; i++) {
    pnt tt1;
    tt1.ind = s[i].ind;
    tt1.val = i;
    b[i] = tt1;
    pnt tt2;
    tt2.ind = s[i].ind;
    tt2.val = s[i].val - tt1.val;
    a[i] = tt2;
  }
  for (int i = n - (n + 2) / 3; i < n; i++) {
    pnt tt1;
    tt1.ind = s[i].ind;
    tt1.val = n - i - 1;
    b[i] = tt1;
    pnt tt2;
    tt2.ind = s[i].ind;
    tt2.val = s[i].val - b[i].val;
    a[i] = tt2;
  }
  for (int i = 0; i < n; i++) {
    aa[i] = a[i].val;
    bb[i] = b[i].val;
  }
  sort(aa, aa + n);
  sort(bb, bb + n);
  for (int i = 0; i < n - 1; i++) {
    if (aa[i] == aa[i + 1]) sa++;
    if (bb[i] == bb[i + 1]) sb++;
  }
  sort(a, a + n);
  sort(b, b + n);
  cout << "YES" << endl;
  for (int i = 0; i < n; i++) cout << a[i].val << " ";
  cout << endl;
  for (int i = 0; i < n; i++) cout << b[i].val << " ";
  cout << endl;
  return 0;
}
