""" https://yukicoder.me/problems/no/1017 300000ペア以上あれば、必ず衝突する 長さ600以下の場合、ちゃんと考えないとダメか? dpして復元かなぁ... しかし、A[i]が大きい場合に苦しい 3つ、4つと増やしていけばいいか 重複はない """ import sys N = int(input()) A = list(map(int,input().split())) adic = {} for i in range(N): if A[i] not in adic: adic[A[i]] = [] adic[A[i]].append(i) vk = [ (len(adic[i]),i) for i in adic ] vk.sort() vk.reverse() if vk[0][0] >= 2: k1 = vk[0][1] ans = [0] * N for i in adic[k1][:2]: ans[i] = (-1)**i * A[i] print ("Yes") print (*ans) sys.exit() dic = {} def check( pos ): s = 0 for p in pos: s += A[p] if s in dic: ans = [0] * N for p in dic[s]: ans[p] = -1 * A[p] for p in pos: ans[p] = 1 * A[p] print ("Yes") print (*ans) sys.exit() dic[s] = pos for i in range(N): check( (i,) ) for i in range(N): for j in range(i): check( (i,j) ) for i in range(N): for j in range(i): for k in range(j): check( (i,j,k) ) for i in range(N): for j in range(i): for k in range(j): for l in range(k): check( (i,j,k,l) ) for i in range(N): for j in range(i): for k in range(j): for l in range(k): for m in range(l): check( (i,j,k,l,m) ) for i in range(N): for j in range(i): for k in range(j): for l in range(k): for m in range(l): for x in range(m): check( (i,j,k,l,m,x) ) for i in range(N): for j in range(i): for k in range(j): for l in range(k): for m in range(l): for x in range(m): for y in range(x): check( (i,j,k,l,m,x,y) ) for i in range(N): for j in range(i): for k in range(j): for l in range(k): for m in range(l): for x in range(m): for y in range(x): for z in range(y): check( (i,j,k,l,m,x,y,z) ) print ("No")