Problem:
Score : 800 points

Problem Statement

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.

Sample Input 1

3
1 5 9

Sample Output 1

Yes
1 1 1 2 2 2 3 3 3

For example, the second occurrence of the integer 2 from the left in a in the output is the fifth element of a from the left.
Similarly, the condition is satisfied for the integers 1 and 3.

Sample Input 2

2
4 1

Sample Output 2

No

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <iostream>
#include <ccomplex>
#include <vector>
#include <cassert>
#include <utility>
#include <algorithm>
#include <string>
#include <deque>
#include <queue>
#include <functional>
#include <cmath>
#include <iomanip>
#include <map>
#include <numeric>
#include <list>
#include <assert.h>
#include <math.h>
#include <valarray>
#include <stdio.h>
#include <algorithm>
#include <set>
#include <complex>
#include <list>
#include <time.h>
#include <stack>
#include <locale>
#include <clocale>
#include <ctype.h>
#include <wchar.h>

using namespace std;
typedef long long int LL;
typedef pair<long long int, long long int> pii;
typedef pair<double, double> pdd;

#define SORT(c) sort((c).begin(),(c).end())
#define BACKSORT(c) sort((c).begin(),(c).end(),std::greater<LL>())
#define FOR(i,a,b) for(LL i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)

int xcomp(vector<int>& a, vector<int>& b) {
	return a[0] < b[0];
}

int ycomp(vector<int>& a, vector<int>& b) {
	return a[1] < b[1];
}

int zcomp(vector<int>& a, vector<int>& b) {
	return a[2] < b[2];
}
#define XSORT(c) sort((c).begin(),(c).end(),xcomp)
#define YSORT(c) sort((c).begin(),(c).end(),ycomp)
#define ZSORT(c) sort((c).begin(),(c).end(),zcomp)

#define ALL(x) (x).begin(),(x).end()
LL mod = 1000000007;

int main() {
	int N;
	cin >> N;
	vector<vector<int>> x(N,vector<int>(2,-1));
	vector<int> A(N*N, 0);
	REP(i, N) {
		cin >> x[i][0];
		x[i][1] = i + 1;
		A[x[i][0] - 1] = i + 1;
	}
	XSORT(x);
	bool flag = true;
	REP(i, N) {
		LL now = 0;
		REP(j, x[i][1] - 1) {
			if (A[now] == 0) {
				A[now] = x[i][1];
				now++;
			}
			else {
				if (A[now] == x[i][1]) {
					flag = false;
					goto GOMI;
				}
				else {
					now++;
					j--;
				}
			}
		}
	}

	REP(i, N) {
		LL now = N*N-1;
		REP(j, N- x[N-i-1][1]) {
			if (A[now] == 0) {
				A[now] = x[N - i - 1][1];
				now--;
			}
			else {
				if (A[now] == x[N - i - 1][1]) {
					flag = false;
					goto GOMI;
				}
				else {
					now--;
					j--;
				}
			}
		}
	}

GOMI:

	if (flag) {
		cout << "Yes" << endl;
		REP(i, N*N) {
			cout << A[i] << " ";
		}
		cout << endl;
	}
	else {
		cout << "No" << endl;
	}
}