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 <bits/stdc++.h>
using namespace std;
#define mid ((s + e) / 2)
#define makefast ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define comp(x) (lower_bound(vec.begin(), vec.end(), x) - vec.begin())
long long M = 1e9 + 7;
//>>>>>>>>>>>>>>>>>>>

const int N = 1e6 + 7;

int n;
int x[N];
int a[N];
int ord[N];
int main() {
	makefast;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> x[i];
		a[x[i]] = i;
		ord[i] = i;
	}
	sort (ord + 1, ord + n + 1, [](int v, int u) {
		return x[v] < x[u];		
	});
	int pnt = n * n;
	for (int i = n; i >= 1; i--) {
		int v = ord[i];
		for (int j = 1; j <= n - v; j++) {
			while (a[pnt]) {
				pnt--;
			}
			if (pnt < x[v]) {
				cout << "No";
				return 0;
			}
			a[pnt] = v;
		}
	}
	pnt = 1;
	for (int i = 1; i <= n; i++) {
		int v = ord[i];
		for (int j = 1; j <= v - 1; j++) {
			while (a[pnt])
				pnt++;
			if (x[v] < pnt) {
				cout << "No";
				return 0;
			}
			a[pnt] = v;
		}
	}
	cout << "Yes" << '\n';
	for (int i = 1; i <= n * n; i++)
		cout << a[i] << ' ';

}
