#include <bits/stdc++.h>
using namespace std;
const int N = 200200;
int i, j, k, n, m, ch, ff, dn, En, t;
int b[N << 1], d[N << 1], h[N], z[N], fg[N], ans[N], fa[N], fv[N];
struct edge {
  int s, v, n;
} E[N << 1];
void R(int &x) {
  ff = x = 0;
  ch = getchar();
  while (ch < '0' || '9' < ch) {
    if (ch == '-') ff = 1;
    ch = getchar();
  }
  while ('0' <= ch && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  if (ff) x = -x;
}
void E_add(int x, int y, int v) {
  E[++En].s = y;
  E[En].v = v;
  E[En].n = h[x];
  h[x] = En;
}
void dfs(int x) {
  z[x] = 1;
  for (int k = h[x]; k; k = E[k].n)
    if (!z[E[k].s]) {
      if (E[k].v > 0)
        ans[E[k].v] = 1;
      else
        ans[-E[k].v] = 0;
      dfs(E[k].s);
    }
}
int Dfs(int x) {
  fg[x] = 1;
  for (int k = h[x]; k; k = E[k].n)
    if (-E[k].v != fv[x]) {
      if (fg[E[k].s]) {
        for (int t = x; t != E[k].s; t = fa[t]) {
          d[++dn] = t;
          if (fv[t] > 0)
            ans[fv[t]] = 1;
          else
            ans[-fv[t]] = 0;
        }
        d[++dn] = E[k].s;
        if (E[k].v > 0)
          ans[E[k].v] = 1;
        else
          ans[-E[k].v] = 0;
        return 1;
      }
      fa[E[k].s] = x;
      fv[E[k].s] = E[k].v;
      if (Dfs(E[k].s)) return 1;
    }
  return 0;
}
int main() {
  R(n);
  R(m);
  for (i = 1; i <= n; i++) {
    R(k);
    for (j = 1; j <= k; j++) {
      R(t);
      if (t > 0) {
        if (!b[t * 2])
          b[t * 2] = i;
        else {
          ans[t] = 1;
          d[++dn] = b[t * 2];
          d[++dn] = i;
        }
      } else {
        t = -t;
        if (!b[t * 2 + 1])
          b[t * 2 + 1] = i;
        else {
          ans[t] = 0;
          d[++dn] = b[t * 2 + 1];
          d[++dn] = i;
        }
      }
    }
  }
  for (i = 1; i <= m; i++) {
    if (!b[i * 2] && !b[i * 2 + 1]) continue;
    if (!b[i * 2]) {
      ans[i] = 0;
      d[++dn] = b[i * 2 + 1];
      continue;
    }
    if (!b[i * 2 + 1]) {
      ans[i] = 1;
      d[++dn] = b[i * 2];
      continue;
    }
    E_add(b[i * 2], b[i * 2 + 1], -i);
    E_add(b[i * 2 + 1], b[i * 2], i);
  }
  for (i = 1; i <= dn; i++) dfs(d[i]);
  for (i = 1; i <= n; i++)
    if (!z[i]) {
      dn = 0;
      if (!Dfs(i)) return puts("NO"), 0;
      for (j = 1; j <= dn; j++) z[d[j]] = 1;
      for (j = 1; j <= dn; j++) dfs(d[j]);
    }
  puts("YES");
  for (i = 1; i <= m; i++) putchar('0' + ans[i]);
  puts("");
}
