import sys import math import collections import bisect # sys.setrecursionlimit(10000001) INF = 10 ** 20 MOD = 10 ** 9 + 7 # MOD = 998244353 def ni(): return int(sys.stdin.buffer.readline()) def ns(): return map(int, sys.stdin.buffer.readline().split()) def na(): return list(map(int, sys.stdin.buffer.readline().split())) def na1(): return list(map(lambda x: int(x)-1, sys.stdin.buffer.readline().split())) # ===CODE=== def main(): n = ni() a = na() a = [[ai, i, -1] for i, ai in enumerate(a)] a.sort() flg = True for i in range(2, n+1): if a[i-2][0] > i-1: flg = False break a[i-2][2] = i-a[i-2][0] if flg: print("YES") a.sort(key=lambda x: x[1]) for ai, idx,res in a: print(res) else: print("NO") if __name__ == '__main__': main()