#include <bits/stdc++.h>
const int N = 1e5 + 5;
int n;
std::pair<int, int> A[N];
struct Answer {
  int id, b, c;
  bool operator<(const Answer &x) const { return id < x.id; }
} ans[N];
inline int read() {
  int now = 0, f = 1;
  register char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') f = -1;
  for (; isdigit(c); now = now * 10 + c - '0', c = getchar())
    ;
  return now * f;
}
int main() {
  n = read();
  for (int i = 1; i <= n; ++i) A[i] = std::make_pair(read(), i);
  std::sort(A + 1, A + 1 + n);
  int k = (n + 2) / 3;
  for (int i = 1; i <= k; ++i)
    ans[i].b = i - 1, ans[i].c = A[i].first - i + 1, ans[i].id = A[i].second;
  for (int i = k + 1; i <= k << 1; ++i)
    ans[i].c = i - 1, ans[i].b = A[i].first - i + 1, ans[i].id = A[i].second;
  for (int i = k << 1 | 1; i <= n; ++i)
    ans[i].c = n - i, ans[i].b = A[i].first - n + i, ans[i].id = A[i].second;
  std::sort(ans + 1, ans + 1 + n);
  puts("YES");
  for (int i = 1; i < n; ++i) printf("%d ", ans[i].b);
  printf("%d\n", ans[n].b);
  for (int i = 1; i < n; ++i) printf("%d ", ans[i].c);
  printf("%d", ans[n].c);
  return 0;
}
