#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;

typedef long long ll;

int ki[10];
int sii[10][10]; //つながっているところが1　つながっていないところが0
int pi[10];

int main() {
    int N,M;
    cin >> N >>M;
    for (int i=0;i<M;i++){
        cin >> ki[i];
        for (int j=0;j<ki[i];j++){
            int tp;
            cin >> tp;
            tp--;
            sii[i][tp] = 1;
        }
    }
  	for (int i=0;i<M;i++){
      cin >> pi[i];
    }
    bool flag = true;
    int ans=0;
    if (N==10){
        for (int a=0;a<2;a++){
            for (int b=0;b<2;b++){
                for (int c=0;c<2;c++){
                    for (int d=0;d<2;d++){
                        for (int e=0;e<2;e++){
                            for (int f=0;f<2;f++){
                                for (int g=0;g<2;g++){
                                    for (int h=0;h<2;h++){
                                        for (int p=0;p<2;p++){
                                            for (int q=0;q<2;q++){
                                                flag = true;
                                                for (int i=0;i<M;i++){
                                                    int num = a*sii[i][0] + b*sii[i][1] + c*sii[i][2] + d*sii[i][3] + e*sii[i][4] + f*sii[i][5] + g*sii[i][6] + h*sii[i][7] + p*sii[i][8] + q*sii[i][9];
                                                    if (num % 2 != pi[i]) flag = false;
                                                }
                                                if (flag) ans++;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else if (N==9){
        for (int a=0;a<2;a++){
            for (int b=0;b<2;b++){
                for (int c=0;c<2;c++){
                    for (int d=0;d<2;d++){
                        for (int e=0;e<2;e++){
                            for (int f=0;f<2;f++){
                                for (int g=0;g<2;g++){
                                    for (int h=0;h<2;h++){
                                        for (int p=0;p<2;p++){
                                            flag = true;
                                            for (int i=0;i<M;i++){
                                                int num = a*sii[i][0] + b*sii[i][1] + c*sii[i][2] + d*sii[i][3] + e*sii[i][4] + f*sii[i][5] + g*sii[i][6] + h*sii[i][7] + p*sii[i][8];
                                                if (num % 2 != pi[i]) flag = false;
                                            }
                                            if (flag) ans++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else if (N==8){
        for (int a=0;a<2;a++){
            for (int b=0;b<2;b++){
                for (int c=0;c<2;c++){
                    for (int d=0;d<2;d++){
                        for (int e=0;e<2;e++){
                            for (int f=0;f<2;f++){
                                for (int g=0;g<2;g++){
                                    for (int h=0;h<2;h++){
                                        flag = true;
                                        for (int i=0;i<M;i++){
                                            int num = a*sii[i][0] + b*sii[i][1] + c*sii[i][2] + d*sii[i][3] + e*sii[i][4] + f*sii[i][5] + g*sii[i][6] + h*sii[i][7];
                                            if (num % 2 != pi[i]) flag = false;
                                        }
                                        if (flag) ans++;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else if (M==7){
        for (int a=0;a<2;a++){
            for (int b=0;b<2;b++){
                for (int c=0;c<2;c++){
                    for (int d=0;d<2;d++){
                        for (int e=0;e<2;e++){
                            for (int f=0;f<2;f++){
                                for (int g=0;g<2;g++){
                                    flag = true;
                                    for (int i=0;i<M;i++){
                                        int num = a*sii[i][0] + b*sii[i][1] + c*sii[i][2] + d*sii[i][3] + e*sii[i][4] + f*sii[i][5] + g*sii[i][6];
                                        if (num % 2 != pi[i]) flag = false;
                                    }
                                    if (flag) ans++;
                                }
                            }
                        }
                    }
                }
            }
        }
    } else if (N==6){
        for (int a=0;a<2;a++){
            for (int b=0;b<2;b++){
                for (int c=0;c<2;c++){
                    for (int d=0;d<2;d++){
                        for (int e=0;e<2;e++){
                            for (int f=0;f<2;f++){
                                flag = true;
                                for (int i=0;i<M;i++){
                                    int num = a*sii[i][0] + b*sii[i][1] + c*sii[i][2] + d*sii[i][3] + e*sii[i][4] + f*sii[i][5];
                                    if (num % 2 != pi[i]) flag = false;
                                }
                                if (flag) ans++;
                            }
                        }
                    }
                }
            }
        }
    } else if (N==5){
        for (int a=0;a<2;a++){
            for (int b=0;b<2;b++){
                for (int c=0;c<2;c++){
                    for (int d=0;d<2;d++){
                        for (int e=0;e<2;e++){
                            flag = true;
                            for (int i=0;i<M;i++){
                                int num = a*sii[i][0] + b*sii[i][1] + c*sii[i][2] + d*sii[i][3] + e*sii[i][4];
                                if (num % 2 != pi[i]) flag = false;
                            }
                            if (flag) ans++;
                        }
                    }
                }
            }
        }
    } else if (N==4){
        for (int a=0;a<2;a++){
            for (int b=0;b<2;b++){
                for (int c=0;c<2;c++){
                    for (int d=0;d<2;d++){
                        flag = true;
                        for (int i=0;i<M;i++){
                            int num = a*sii[i][0] + b*sii[i][1] + c*sii[i][2] + d*sii[i][3];
                            if (num % 2 != pi[i]) flag = false;
                        }
                        if (flag) ans++;
                    }
                }
            }
        }
    } else if (N==3){
        for (int a=0;a<2;a++){
            for (int b=0;b<2;b++){
                for (int c=0;c<2;c++){
                    flag = true;
                    for (int i=0;i<M;i++){
                        int num = a*sii[i][0] + b*sii[i][1] + c*sii[i][2];
                        if (num % 2 != pi[i]) flag = false;
                    }
                    if (flag) ans++;
                }
            }
        }
    } else if (N==2){
        for (int a=0;a<2;a++){
            for (int b=0;b<2;b++){
                flag = true;
                for (int i=0;i<M;i++){
                    int num = a*sii[i][0] + b*sii[i][1];
                    if (num % 2 != pi[i]) flag = false;
                }
                if (flag) ans++;
            }
        }
    } else if (N==1){
        for (int a=0;a<2;a++){
            flag = true;
            for (int i=0;i<M;i++){
                int num = a*sii[i][0];
                if (num % 2 != pi[i]) flag = false;
            }
            if (flag) ans++;
        }
    }

    cout << ans << endl;
}

Measured memory_bytes: 256