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;

void out()
{
	puts("No");
	exit(0);
}
#define rep(i,l,r) for(int i=l;i<=r;++i)
const int N=500+5;
int cnt[N],px[N],q[N],a[N*N];
bool x_xiao(int a,int b)
{
	return px[a]<px[b];
}

int main()
{
	//freopen("1.in","r",stdin);
	int n;
	cin>>n;
	rep(i,1,n)cin>>px[i];
	rep(i,1,n)q[i]=i;
	sort(q+1,q+n+1,x_xiao);
	rep(i,1,n)cnt[i]=q[i]-1;
	int j1=1,j2=1,j3=1;//[j2,n]>i,[1,j1)solved,[j2,j3)solved
	rep(i,1,n*n)
	if(px[q[j2]]==i)
	{
		if(cnt[j2])out();
		a[i]=q[j2];
		cnt[j2]=n-q[j2];
		++j2;
		if(j3<j2)j3=j2;
	}
	else
	{
		while(!cnt[j3]&&j3<=n)++j3;
		if(j3<=n)
		{
			a[i]=q[j3];
			--cnt[j3];
			continue;
		}
		while(!cnt[j1]&&j1<=n)++j1;
		if(j1>n)out();
		a[i]=q[j1];
		--cnt[j1];
	}
	puts("Yes");
	rep(i,1,n*n)printf("%d ",a[i]);
}