#include <bits/stdc++.h>
using namespace std;
const int TAM = 1e5 + 10;
struct Nodo {
  int id, s, a, b;
};
inline bool byS(const Nodo& x, const Nodo& y) { return x.s < y.s; }
inline bool byID(const Nodo& x, const Nodo& y) { return x.id < y.id; }
int n;
Nodo nodo[TAM];
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &nodo[i].s);
    nodo[i].id = i;
  }
  sort(nodo, nodo + n, byS);
  int l = (n + 2) / 3;
  for (int i = 0; i < l; i++) {
    nodo[i].a = i;
    nodo[i].b = nodo[i].s - nodo[i].a;
  }
  l = n - n / 3;
  for (int i = (n + 2) / 3; i < l; i++) {
    nodo[i].b = i;
    nodo[i].a = nodo[i].s - nodo[i].b;
  }
  for (int i = n - n / 3; i < n; i++) {
    nodo[i].b = n - 1 - i;
    nodo[i].a = nodo[i].s - nodo[i].b;
  }
  sort(nodo, nodo + n, byID);
  puts("YES");
  for (int i = 0; i < n; i++) printf("%d ", nodo[i].a);
  puts("");
  for (int i = 0; i < n; i++) printf("%d ", nodo[i].b);
  puts("");
  return 0;
}
