#include <bits/stdc++.h>
const double PI = acos(-1.0);
const double EPS = 1E-9;
const int INF = (int)1E9;
using namespace std;
int cmp(const void *a, const void *b) {
  int *pa = (int *)a, *pb = (int *)b;
  return pa[0] - pb[0];
}
int N, M;
int s[100005][2], s1[100005], s2[100005];
set<int> set1, set2;
int main() {
  cin >> N;
  M = N / 3;
  if (N % 3) M++;
  for (int i = 0; i < N; i++) {
    scanf("%d", &s[i][0]);
    s[i][1] = i;
  }
  qsort(s, N, sizeof(s[0]), cmp);
  bool suc = 1;
  int a, b;
  int min2 = INF;
  int t;
  for (int i = 0; i < M; i++) {
    t = s[i][1];
    a = i;
    b = s[i][0] - a;
    s1[t] = a;
    s2[t] = b;
  }
  for (int i = 0; i < M; i++) {
    if (i + M >= N) break;
    t = s[i + M][1];
    a = M + i;
    b = s[i + M][0] - a;
    s1[t] = b;
    s2[t] = a;
    min2 = ((a) < (min2) ? (a) : (min2));
  }
  min2--;
  for (int i = 0; i < N - 2 * M; i++) {
    if (i + 2 * M >= N) break;
    t = s[i + 2 * M][1];
    if (min2 < 0) {
      cout << "NO" << endl;
      return 0;
    }
    b = min2--;
    a = s[i + 2 * M][0] - b;
    s1[t] = a;
    s2[t] = b;
  }
  cout << "YES" << endl;
  for (int i = 0; i < N; i++) printf("%d ", s1[i]);
  cout << endl;
  for (int i = 0; i < N; i++) printf("%d ", s2[i]);
  cout << endl;
  return 0;
}
