#include <bits/stdc++.h>
using namespace std;
 
int main () {
  int N, M,counter,counter1,answer=0;
  int y=0;
  int aaa=0;
  cin >> N >> M;
  int p[M]={0};
  int ss[M][N]={{0}};
  int k[M]={0};
  for (int j = 0; j < M; j++) {
    cin>>k[j];
    for (int i = 0; i < k[j]; i++) {
      cin>>ss[j][i];}}
    for (int i = 0; i < M ; i++) {
    cin>>p[i];}
  // すべての選び方を試して、総和がKになるものがあるかを調べる
  for (int tmp = 0; tmp < (1 << N); tmp++) {
    bitset<10> s(tmp);  
  for( int i=0; i<M;i++){
  for( int j=0; j<k[j];j++){
     if (s.test(ss[i][j]-1)) {
        answer++;
      }
    }
    if(answer%2==p[i]){
    aaa++;}
    answer=0;}
    if(aaa==M){
    y++;}
    aaa=0;}
    cout << y << endl;
}
