#include <bits/stdc++.h >
#include <vector>

using namespace std;

int n,m;
vector<int > adj[15];
int p[15];
bool bitmask[15];

int dp(int pos, bool mask[]){

    if(pos==n+1){
        int on = 0;

        for(int i = 1;i<=m;i++){
            int check1=0;
            //cout << i << ':';
            for(int j : adj[i]){
                //cout << mask[j]<< ' ';
                if(mask[j]){
                    check1++;
                }
            }
            //cout << ':' << p[i] << ' ' << check1;
            //cout << endl;

            //cout << on  <<endl;

            if(check1%2 == p[i]){
                on++;
            }
        }



        return on==m? 1:0;
    }
    mask[pos]=0;
    int op1 = dp(pos+1,mask);
    mask[pos]=1;
    int op2 = dp(pos+1,mask);

    return op1+op2;

}


int main() {
    cin >> n>>m;
    for(int i=1;i<=m;i++){
        int k ;
        cin >> k;
        for(int j = 0;j<k;j++){
            int u;
            cin >> u;
            adj[i].push_back(u);
        }
    }

    for(int i = 1;i<=m;i++){
        cin >> p[i];
    }

    cout << dp(1,bitmask);


    return 0;
}