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<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 520
using namespace std;
struct node{
	int x,id,sum;
}b[N];
int ans[N*N],p[N];
int n,a[N],head,tot;
bool cmp(node x,node y){
	return x.x<y.x;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		b[i].x=a[i];
		b[i].id=i;
		b[i].sum=n-i;
	}
	sort(b+1,b+1+n,cmp);
	head=1;
	int sum=0;
	for(int i=1;i<=n;i++){
		int k=b[i].x;
		int o=b[i].id;
		int tot=0;
		for(int i=1;i<=k-1;i++){
			if(tot==o-1)break;
			if(ans[i]==0)ans[i]=o,tot++;
		}
		ans[k]=o;
	}
	for(int i=1;i<=n*n;i++){
		if(ans[i])continue;
		if(head==n&&b[head].sum==0)break;
		while(b[head].sum==0&&head<n)head++;
		b[head].sum--;
		ans[i]=b[head].id;
	}
	for(int i=1;i<=n*n;i++){
		p[ans[i]]++;
		if(ans[i]==p[ans[i]]){
			if(a[ans[i]]!=i){
				printf("No\n");
				exit(0);
			}
		}
	}
	printf("Yes\n");
	for(int i=1;i<=n*n;i++)printf("%d ",ans[i]);
}