# おっと有向辺だった # しかも1から全頂点にたどり着けるかという問題 # 完全に問題読み違えてた # Union Findでもない # 辺をソートして、1がなければ2にたどり着けない # 2までたどり着いたら、1か2がなければ3にたどり着けない # これを繰り返してNまで行ければYES # グラフ構築では、行先から辺の数を引けば起点が決まる N = int(input()) A = list(map(int, input().split())) A_with_idx = [] for i in range(N-1): A_with_idx.append([A[i], i]) A_with_idx.sort() ans = 'YES' for i in range(1, N): if A_with_idx[i-1][0] > i: ans = 'NO' break else: A_with_idx[i-1].append(i+1-A_with_idx[i-1][0]) A_with_idx.sort(key = lambda x:x[1]) #print(ans) #print(A_with_idx) if ans == 'NO': print(ans) else: print(ans) for a, b, c in A_with_idx: print(c)