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 <cassert>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
    int n; cin >> n;
    vector<pair<int, int> > x;
    for (int i = 0; i < n; i++) {
        int a; cin >> a;
        x.push_back({a, i+1});
    }
    sort(x.begin(), x.end());
    vector<int> ans(n*n,0);
    for (int i = 0, s = 0; i < n; i++) {
        int j = x[i].second;
        s += j;
        if (s > x[i].first) { cout << "No\n"; return 0; }
        ans[x[i].first-1] = j;
        for (int k = 0, jj = j-1; jj > 0; jj--) {
            while (ans[k] > 0) k++;
            ans[k] = j;
        }
    }
    for (int i = n-1, s = 0; i >= 0; i--) {
        int j = x[i].second;
        s += n-j+1;
        if (s > n*n-x[i].first+1) { cout << "No\n"; return 0; }
        for (int k = x[i].first, jj = n-j; jj > 0; jj--) {
            while (ans[k] > 0) k++;
            assert (k < n*n);
            ans[k] = j;
        }
    }

    cout << "Yes\n";
    for (int a : ans) cout << a << ' ';
    cout << endl;
}
