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;
struct T{
	int id,v,num;
}p[510],s[510];
int n,a[510],ar[250010],nw;
bool cmp(T x,T y){
	return x.id<y.id;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;++i){
		scanf("%d",&a[i]);
		if(ar[a[i]])return puts("No");
		ar[a[i]]=i,p[i]=(T){a[i],i,i-1},s[i]=(T){a[i],i,n-i};
	}
	sort(p+1,p+n+1,cmp),sort(s+1,s+n+1,cmp),nw=1;
	while(nw<=n&&!p[nw].num)++nw;
	for(int i=1;i<=n*n&&nw<=n;++i)if(!ar[i]){
		if(i>=p[nw].id)return puts("No"),0;
		ar[i]=p[nw].v,--p[nw].num;
		while(nw<=n&&!p[nw].num)++nw;
	}
	if(nw<=n)return puts("No"),0;
	nw=n;
	while(nw>=1&&!s[nw].num)--nw;
	for(int i=n*n;i>=1&&nw>=1;--i)if(!ar[i]){
		if(i<=s[nw].id)return puts("No"),0;
		ar[i]=s[nw].v,--s[nw].num;
		while(nw>=1&&!s[nw].num)--nw;
	}
	if(nw>=1)return puts("No"),0;
	puts("Yes");
	for(int i=1;i<=n*n;++i)printf("%d%c",ar[i]," \n"[i==n*n]);
	return 0;
}