#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef vector vi; typedef pair pii; #define MP make_pair #define PB push_back #define inf 1000000007 #define rep(i,n) for(int i = 0; i < (int)(n); ++i) #define all(x) (x).begin(),(x).end() template void Fill(A (&array)[N], const T &val){ std::fill( (T*)array, (T*)(array+N), val ); } template inline bool chmax(T &a, T b){ if(a inline bool chmin(T &a, T b){ if(a>b){ a = b; return true; } return false; } map > mp; ll n; vectora; vector x,y; bool flag = 0; void dfs(vector&s,ll sm,int i,int c,int t){ if(c + n-i < t)return; if(flag)return; if(c==t){ if(mp.find(sm)!=mp.end()){ flag = 1; x = mp[sm]; y = s; }else{ mp[sm] = s; } return; } if(i==n)return; dfs(s,sm,i+1,c,t); if(flag)return; s.push_back(i); dfs(s,sm+a[i],i+1,c+1,t); s.pop_back(); if(flag)return; } int main(){ cin >> n; a.resize(n); rep(i,n)cin >> a[i]; rep(i,n){ vector p; dfs(p,0,0,0,i+1); } if(flag){ cout << "Yes\n"; set st; set st2; rep(i,x.size())st.insert(x[i]); rep(i,y.size()){ if(st.count(y[i])==1){ st.erase(y[i]); }else{ st2.insert(y[i]); } } rep(i,n){ if(st.count(i)==1){ cout << a[i] << " "; }else if(st2.count(i)==1){ cout << -a[i] << " "; }else{ cout << 0 << " "; } } cout << "\n"; }else{ cout << "No\n"; } return 0; }