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 fi first
#define sc second
typedef pair<int,int> P;
#define MAX_N 514
int N;
P X[MAX_N];
int ans[MAX_N*MAX_N];
int cou[MAX_N];
bool f[MAX_N];
int main()
{
	scanf("%d",&N);
	for(int i=0;i<N;i++){
		scanf("%d",&X[i].fi);X[i].sc=i+1;ans[X[i].fi-1]=i+1;
		cou[i]=N;
	}
	sort(X,X+N);
	for(int i=0;i<N*N;i++){
		if(ans[i]!=0){
			cou[ans[i]-1]--;f[ans[i]-1]=true;
			if(cou[ans[i]-1]!=N-ans[i]){
				printf("No\n");
				return 0;
			}
		}
		else{
			bool F=true;
			for(int j=0;j<N;j++){
				if(cou[X[j].sc-1]>=N-X[j].sc+2){
					ans[i]=X[j].sc;
					cou[X[j].sc-1]--;
					F=false;
					break;
				}
			}
			if(F){
				for(int j=0;j<N;j++){
					if(cou[j]>0&&f[j]){
						ans[i]=j+1;cou[j]--;F=false;
						break;
						
					}
				}
			}
			if(F){
				printf("No\n");
				return 0;
			}
		}
		//printf("%d %d\n",i,ans[i]);
	}
	printf("Yes\n");
	printf("%d",ans[0]);
	for(int i=1;i<N*N;i++){
		printf(" %d",ans[i]);
	}
	printf("\n");
	
	return 0;
}
