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>
int N, a[501], O[250001], L[501], R[501], C[501], A[501];
std::pair < int, int > p[501];
int main()
{
	scanf("%d", &N);
	for (int i = 1; i <= N; i++)
	{
		scanf("%d", a + i);
		O[a[i]] = i;
		L[i] = i - 1;
		R[i] = N - i;
		p[i] = { a[i], i };
	}
	std::sort(p + 1, p + N + 1);
	for (int i = 1, c = 1; i <= N * N; i++)
		if (!O[i])
		{
			while (c <= N && !L[p[c].second])
				c++;
			if (c > N)
				break;
			O[i] = p[c].second;
			L[p[c].second]--;
		}
	for (int i = N * N, c = N; i; i--)
		if (!O[i])
		{
			while (c && !R[p[c].second])
				c--;
			if (!c)
				break;
			O[i] = p[c].second;
			R[p[c].second]--;
		}
	for (int i = 1; i <= N * N; i++)
		if (++C[O[i]] == O[i])
			A[O[i]] = i;
	for (int i = 1; i <= N; i++)
		if (A[i] != a[i] || C[i] != N)
		{
			puts("No");
			return 0;
		}
	puts("Yes");
	for (int i = 1; i <= N * N; i++)
		printf("%d%c", O[i], " \n"[i == N * N]);
	return 0;
}
