#include <bits/stdc++.h>
class fastin {
 private:
  int _ch, _f;

 public:
  inline fastin& operator>>(char& c) {
    c = getchar();
    return *this;
  }
  template <typename _Tp>
  inline fastin& operator>>(_Tp& _x) {
    _x = 0;
    while (!isdigit(_ch)) _f |= (_ch == 45), _ch = getchar();
    while (isdigit(_ch))
      _x = (_x << 1) + (_x << 3) + (_ch ^ 48), _ch = getchar();
    _f && (_x = -_x, _f = 0);
    return *this;
  }
  fastin() { _ch = _f = 0; }
} fin;
class fastout {
 private:
  int _val[32], _head;

 public:
  inline fastout& operator<<(char c) {
    putchar(c);
    return *this;
  }
  template <typename _Tp>
  inline fastout& operator<<(_Tp _x) {
    _Tp _k;
    if (_x == 0) {
      putchar('0');
      return *this;
    }
    if (_x < 0) putchar('-'), _x = -_x;
    while (_x > 0)
      _k = _x / 10, ++_head, _val[_head] = (_x - (_k << 1) - (_k << 3)) ^ 48,
      _x = _k;
    while (_head > 0) putchar(_val[_head]), --_head;
    return *this;
  }
  fastout() { _head = 0; }
} fout;
const int maxn = 100004;
const int mod = 998244353, inf = 1e9 + 7;
struct v {
  int num, a, l, r;
} val[maxn];
inline bool cmp1(v x, v y) { return x.a < y.a; }
inline bool cmp2(v x, v y) { return x.num < y.num; }
signed main() {
  int n;
  fin >> n;
  for (register int i = 1; i <= n; ++i) fin >> val[i].a, val[i].num = i;
  std::sort(val + 1, val + 1 + n, cmp1);
  int p1 = ceil(n / 3.0), p3 = floor(n / 3.0);
  int p2 = n - p1 - p3;
  for (register int i = 1; i <= p1; ++i)
    val[i].l = i - 1, val[i].r = val[i].a - val[i].l;
  for (register int i = p1 + 1; i <= n - p3; ++i)
    val[i].r = i - 1, val[i].l = val[i].a - val[i].r;
  for (register int i = p1 + p2 + 1; i <= n; ++i)
    val[i].r = n - i, val[i].l = val[i].a - val[i].r;
  puts("YES");
  std::sort(val + 1, val + 1 + n, cmp2);
  for (register int i = 1; i <= n; ++i) fout << val[i].l << ' ';
  fout << '\n';
  for (register int i = 1; i <= n; ++i) fout << val[i].r << ' ';
  fout << '\n';
  return 0;
}
