#include #include using namespace std; using namespace atcoder; typedef long long ll; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) static const double pi = 3.141592653589793; const ll INF = 1LL << 60; const ll mod = 1000000007; const ll imod = 998244353; using mint = modint998244353; vector dx = {1, 0, -1, 0}, dy = {0, 1, 0, -1}; ll P(ll x, ll n) { ll ret = 1; while (n > 0) { if (n & 1) ret *= x; x *= x; n >>= 1; } return ret; } void seek(bool f){ cout << (f ? "Yes" : "No") << endl; } int main(){ int N, M; cin >> N >> M; vector A(N); rep(i, N){ cin >> A[i]; } vector> G(N); rep(i, M){ int u, v; cin >> u >> v; u--; v--; G[u].push_back(v); G[v].push_back(u); } for(int i = 0; i < (1 << N); i++){ vector mine(N, 0); rep(bit, N){ if(i & (1 << bit)){ mine[bit] = 1; } } bool f = true; for(int v = 0; v < N; v++){ int res = 0; for(int u : G[v]){ res += mine[u]; } if(res != A[v]){ f = false; } } if(f){ cout << "Yes" << endl; rep(v, N){ cout << mine[v] << " "; } cout << endl; return 0; } } cout << "No" << endl; }