#include #include using namespace std; using namespace atcoder; using ll = long long int; using ld = long double; const ll MAX = 5000000000000000000; const ld PI = 3.14159265358979; const ll MOD = 0;//2024948111; ld dotorad(ld K){return PI * K / 180.0;} ld radtodo(ld K){return K * 180.0 / PI;} mt19937 mt; void randinit(){srand((unsigned)time(NULL));mt = mt19937(rand());} int main(){ ll N; cin >> N; vector A(N); for(ll i = 0;i < N;i++) cin >> A[i]; ll n = min(25LL,N); vector memo(4000000,-1); ll ans1 = -1,ans2 = -1; for(ll bit = 0;bit < (1LL << n);bit++){ ll p = 0; for(ll i = 0;i < n;i++){ if(bit & (1LL << i)) p += A[i]; } if(memo[p] != -1){ ans1 = memo[p]; ans2 = bit; break; } memo[p] = bit; } if(ans1 == -1) cout << "No" << endl; else{ cout << "Yes" << endl; vector B(N,0); ll s = 0; for(ll i = 0;i < n;i++){ if(ans1 & (1LL << i)) B[i] += A[i]; if(ans2 & (1LL << i)) B[i] -= A[i]; s += B[i]; } for(ll i = 0;i < N - 1;i++) cout << B[i] << ' '; cout << B[N - 1] << endl; } }