You are given an integer sequence x of length N. Determine if there exists an integer sequence a that satisfies all of the following conditions, and if it exists, construct an instance of a.

* a is N^2 in length, containing N copies of each of the integers 1, 2, ..., N.
* For each 1 ≤ i ≤ N, the i-th occurrence of the integer i from the left in a is the x_i-th element of a from the left.

Constraints

* 1 ≤ N ≤ 500
* 1 ≤ x_i ≤ N^2
* All x_i are distinct.

Input

The input is given from Standard Input in the following format:


N
x_1 x_2 ... x_N


Output

If there does not exist an integer sequence a that satisfies all the conditions, print `No`. If there does exist such an sequence a, print `Yes` in the first line, then print an instance of a in the second line, with spaces inbetween.

Examples

Input

3
1 5 9


Output

Yes
1 1 1 2 2 2 3 3 3


Input

2
4 1


Output

No
#include <cstdio>
#include <algorithm>

const int N = 500 + 10;

int n, a[N], x[N], ans[N * N];

inline bool comp(int u, int v) { return x[u] < x[v]; }

int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", &x[i]), a[i] = i;
  std::sort(a + 1, a + n + 1, comp);
  static bool flag[N * N];
  for (int i = 1; i <= n; ++i) ans[x[i]] = i, flag[x[i]] = true;
  static int p[2 * N], q[2 * N];
  int tot = 0;
  for (int i = 1; i <= n; ++i) p[++tot] = a[i] - 1, q[tot] = a[i];
  for (int i = 1; i <= n; ++i) p[++tot] = n - a[i], q[tot] = a[i];
  for (int i = 1, j = 1; i <= n * n; ++i) {
    if (!ans[i]) {
      while (!p[j]) ++j;
      --p[j];
      ans[i] = q[j];
    }
  }
  static int cnt[N];
  for (int i = 1; i <= n * n; ++i) {
    ++cnt[ans[i]];
    if (flag[i] && cnt[ans[i]] != ans[i]) return puts("No"), 0;
  }
  puts("Yes");
  for (int i = 1; i <= n * n; ++i) printf("%d ", ans[i]);
  return 0;
}
