#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define fst first #define scd second #define PB push_back #define MP make_pair #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() #define omajinai ios::sync_with_stdio(false);cin.tie(0) #define rep(i,x) for(int i=0;i<(int)(x);++i) #define rep1(i,x) for(int i=1;i<=(int)(x);++i) #define rrep(i,x) for(int i=(int)x-1;i>=0;--i) #define rrep1(i,x) for(int i=(int)x;i>=1;--i) using ll=long long; using ld=long double; using vi=vector; using vvi=vector; using pii=pair; using vpii=vector; templateostream&operator<<(ostream&os,const pairp){os<<"("<ostream&operator<<(ostream&os,const vectorv){rep(i,v.size()){if(i)os<<", ";os<T&max(T&a,T&b){if(a>=b)return a;return b;} templateT&min(T&a,T&b){if(a < b)return a;return b;} templatebool chmax(T&a,T b){if(a < b){a=b;return true;}return false;} templatebool chmin(T&a,T b){if(a > b){a=b;return true;}return false;} constexpr ll TEN(ll n){return n==0?1:10ll*TEN(n-1);} constexpr ll inf = TEN(9)+5; constexpr ll linf = 3*TEN(18); signed main() { int N; cin >> N; vector a(N-1); vi ans(N-1); rep(i, N-1) cin >> a[i].first, a[i].second = i; sort(all(a)); int mx = 0; rep(i, N-1) { int l = a[i].first; if (mx + 1 - l < 0) { cout << "NO\n"; return 0; } ans[a[i].second] = mx + 1 - l; mx++; } printf("YES\n"); rep(i, N-1) printf("%d\n", ans[i]+1); }