#include<bits/stdc++.h>
#define MP make_pair
#define A first
#define B second;
using namespace std;
const int N = 200000 + 5;
set<int> s[N];
int nr[N * 2], ans[N], vis[N];
priority_queue<pair<int, int> > pq;
int main(){
int n, m, k, x;
scanf("%d%d", &m, &n);
for (int i = 1; i <= m; i++){
scanf("%d", &k);
for (int j = 1; j <= k; j++){
scanf("%d", &x);
nr[n + x] = i;
s[i].insert(x);
}
pq.push(MP(-s[i].size(), i));
}
while (! pq.empty()){
int k = pq.top().B;
pq.pop();
if (vis[k]) continue;
vis[k] = 1;
if (s[k].empty()){
puts("NO");
return 0;
}
int x = *s[k].begin();
ans[abs(x)] = (x > 0);
int i = nr[n - x];
if (i){
s[i].erase(-x);
pq.push(MP(-s[i].size(), i));
}
}
puts("YES");
for (int i = 1; i <= n; i++) printf("%d", ans[i]);
puts("");
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBNUCBtYWtlX3BhaXIKI2RlZmluZSBBIGZpcnN0CiNkZWZpbmUgQiBzZWNvbmQ7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBOID0gMjAwMDAwICsgNTsKc2V0PGludD4gc1tOXTsKaW50IG5yW04gKiAyXSwgYW5zW05dLCB2aXNbTl07CnByaW9yaXR5X3F1ZXVlPHBhaXI8aW50LCBpbnQ+ID4gcHE7CiAKaW50IG1haW4oKXsKCWludCBuLCBtLCBrLCB4OwoJc2NhbmYoIiVkJWQiLCAmbSwgJm4pOwoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKXsKCQlzY2FuZigiJWQiLCAmayk7CgkJZm9yIChpbnQgaiA9IDE7IGogPD0gazsgaisrKXsKCQkJc2NhbmYoIiVkIiwgJngpOwoJCQlucltuICsgeF0gPSBpOwoJCQlzW2ldLmluc2VydCh4KTsKCQl9CgkJcHEucHVzaChNUCgtc1tpXS5zaXplKCksIGkpKTsKCX0KCXdoaWxlICghIHBxLmVtcHR5KCkpewoJCWludCBrID0gcHEudG9wKCkuQjsKCQlwcS5wb3AoKTsKCQlpZiAodmlzW2tdKSBjb250aW51ZTsKCQl2aXNba10gPSAxOwoJCWlmIChzW2tdLmVtcHR5KCkpewoJCQlwdXRzKCJOTyIpOwoJCQlyZXR1cm4gMDsKCQl9CgkJaW50IHggPSAqc1trXS5iZWdpbigpOwoJCWFuc1thYnMoeCldID0gKHggPiAwKTsKCQlpbnQgaSA9IG5yW24gLSB4XTsKCQlpZiAoaSl7CgkJCXNbaV0uZXJhc2UoLXgpOwoJCQlwcS5wdXNoKE1QKC1zW2ldLnNpemUoKSwgaSkpOwoJCX0gCgl9CglwdXRzKCJZRVMiKTsKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgcHJpbnRmKCIlZCIsIGFuc1tpXSk7CglwdXRzKCIiKTsKCXJldHVybiAwOwp9