#include <bits/stdc++.h>
using namespace std;
int bit[20];
int p[20];
int n, m;
int dfs(int level, int mask) {
  if (level == n) {
    int num = 0;
    for (int i = 0; i < m; i++) {
      for (int j = 0; j < n; j++) {
        if ((bit[i] >> j) & 1) {
          if ((mask >> j) & 1) {
            num++;
          }
        }
      }
      if (num % 2 != p[i]) return 0;
    }
    return 1;
  } else {
    return dfs(level + 1, mask + (1 << level)) + dfs(level + 1, mask);
  }
}
int main(void) {
  int k, s;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    cin >> k;
    bit[i] = 1 << n;
    for (int j = 0; j < k; j++) {
      cin >> s;
      bit[i] += 1 << (s - 1);
    }
  }
  for (int i = 0; i < m; i++) cin >> p[i];
  cout << dfs(0, 1 << n) << endl;
  return 0;
}
