#include <cstdio>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <bitset>
#include <utility>
#include <ctime>
#include <cassert>
#include <climits>

using namespace std;

#define TRACE
 
#ifdef TRACE
template<class T, class U>
ostream& operator<<(ostream& out, const pair<T,U>& a){out<<"["<<a.first<<" "<<a.second<<"]";return out;}
template<class T>
ostream& operator<<(ostream& out, const vector<T>& a){out<<"[ ";for(auto &it:a)out<<it<<" ";out<<"]";return out;}
template<class T>
ostream& operator<<(ostream& out, const set<T>& a){out<<"[ ";for(auto &it:a)out<<it<<" ";out<<"]";return out;}
template<class T>
ostream& operator<<(ostream& out, const multiset<T>& a){out<<"[ ";for(auto &it:a)out<<it<<" ";out<<"]";return out;}
template<class T,class U>
ostream& operator<<(ostream& out, const map<T,U>& a){for(auto &it:a)out<<it.first<<" -> "<<it.second<<" | ";return out;}
template<class T,class U>
ostream& operator<<(ostream& out, const multimap<T,U>& a){for(auto &it:a)out<<it.first<<" -> "<<it.second<<" | ";return out;}
#define pra(a,n) cerr<<#a<<" : ";for(int i=0;i<n;++i)cerr<<a[i]<<" ";cerr<<endl;
#define praa(a,n,m) cerr<<#a<<" : "<<endl;for(int i=0;i<n;++i){for(int j=0;j<m;++j)cerr<<a[i][j]<<" ";cerr<<endl;}
#define pr(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void __f(const char* name, Arg1&& arg1){
  cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args){
  const char* comma = strchr(names + 1, ',');cerr.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
} 
#else
#define pr(...)
#define pra(a,n)
#define praa(a,n,m)
#endif
#define int long long

void printno()  {
    cout << "No\n";
    exit(0);
}

void Main()    {
    int n;
    cin >> n;

    vector<pair<int, int> > x(n);
    for(int i = 0; i < n; i++) {
        cin >> x[i].first;
        x[i].second = i + 1;
    }

    vector<int> arr(n * n + 1, -1);
    sort(x.begin(), x.end());

    for(auto el: x) {
        int num = el.second, pos = el.first;
        arr[pos] = num;
        int toPut = num - 1;
        for(int i = 1; i < pos; i++)    {
            if(arr[i] == -1 and toPut)    {
                arr[i] = num;
                toPut--;
            }
        }  
        if(toPut)   {
            printno();
        } 
    }

    reverse(x.begin(), x.end());
    for(auto el: x) {
        int num = el.second, pos = el.first;
        int toPut = n - num;
        for(int i = n * n; i > pos; i--)    {
            if(arr[i] == -1 and toPut)  {
                arr[i] = num;
                toPut--;
            }
        }
        if(toPut)   {
            printno();
        }
    }

    cout << "Yes\n";
    for(int i = 1; i <= n * n; i++) {
        cout << arr[i] << " ";
    }
    cout << "\n";
}

#undef int
int main()    {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("", "r", stdin);
    //freopen("", "w", stdout);
    Main();
}



























Measured memory_bytes: 3200