#include <bits/stdc++.h>
using nemespace std;
int main() {
    int N,M;
    int answer=0;
    
    cin >> N >> M;
    
    vector<vector<int>> map(M,vector<int>);
    vector<int> crit(M);
    vector<int> amount(M);
    
    for(int i=0;i<M;i++){
        cin >> amount.at(i);
        
        map.at(i).size()=amount.at(i);
        
        for(int j=0;j<k;j++){
        
            cin >> map.at(i).at(j);
            
        }
        
    }
   
    for(int i=0;i<M;i++){
    
        cin >> crit.at(i);
        
    }
    
    for(int bit=0;bit<((int)1<<N);bit++){
    
        int point1=0;
        
        for(int i=0;i<M;i++){
            
            vector<int> bin(map.at(i).size());
            int point2=0;
            
            for(int j=0;j<map.at(i).size();j++){
                if(bit>>map.at(i).at(j)==1) point2++;
            }
            
            if(point2%2==crit.at(i)) point1++;
            
        }
        
        if(point1==M) answer++;
        
    }
    
    cout << answer << endl;
    
}
















