#include<bits/stdc++.h>
using namespace std;

string ans;
const int MAX=10;
 int N=MAX;
const int MAX2=10;
int M=MAX2;

int sum;
vector<int>k(M);
vector<int>p(M);
vector<vector<int>>dat

int dfs(int i,int a,int b,string ans,int d){
  if(i==pow(2,N)){
    return sum;
  }

  if(d==M){
    int x=0;
    int y=0;
    int chk=0;
    for(int k=0;k<N;k++){
      if(ans[k]=='A'){
        x++;
      }
      else{
        y++;
      }
    }
    
    for(int l=0;l<M;l++){
      int sum2=0;
     for(int q=0;q<N;q++){
       if(ans[date[l][q]]=='A'){
         sum2++;
         
       }
     }
      
      if(sum2%2==p[l]){
        chk++; 
    }
   
  }
    if(chk==M){
      sum++;
      string ans;
      int f=dfs(i+1,0,0,ans,1);
        return f;
      
     
    }
  }
  ans[d-1]='A';
  int m=dfs(i,a+1,b,ans,d+1);
    
    return m;
  
  ans[d-1]='B';
  
  int n=dfs(i,a,b+1,ans,d+1);
    
    return n;
  
}


  
int main(){
  string ans;
  int sum=0;
  cin>>N>>M;
  

for(int i=0;i<M;i++){
  cin>>k[i];
  for(int j=0;j<k[i];j++){
    cin>>date[i][j];

  }
}

  for(int i=0;i<M;i++){
    cin>>p[i];
  }
  
  int solve=dfs(1,0,0,ans,1);
  
  cout<<solve<<endl;
}
  
