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<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define G() Cr=getchar()
int Xr;char Cr;
inline int  rd(){
	Xr=0;G();
	while(Cr<'0'||Cr>'9')G();
	while(Cr>='0'&&Cr<='9')Xr=(Xr<<1)+(Xr<<3)+Cr-'0',G();
	return Xr;
}

int n;
int pos[250005];
struct node{
	int num,p;
}e[5005];

bool comp(node x,node y){
	return x.p<y.p;
}
int main(){
	n=rd();
	for(int i=1;i<=n;i++)
		e[i].num=i,e[i].p=rd(),pos[e[i].p]=i;
		
	sort(e+1,e+1+n,comp);	
		
	int l=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<e[i].num;j++){
			while(pos[l])l++;
			if(l>=e[i].p){
				puts("No");
				return 0;
			}
			pos[l++]=e[i].num;
		}	
	}
	
	int r=n*n;
	for(int i=n;i>=1;i--){
		for(int j=n;j>e[i].num;j--){
			while(pos[r])r--;
			if(r<=e[i].p){
				puts("No");
				return 0;
			}
			pos[r--]=e[i].num;
		}
	}
	
	puts("Yes");
	for(int i=1;i<=n*n;i++)printf("%d ",pos[i]);
	puts("");
}