# -*- coding: utf-8 -*-

def get_input() -> tuple:
    """
    標準入力を取得する.

    Returns:\n
        tuple: 標準入力
    """
    N, M = list(map(int, input().split()))
    k, s = [], []
    for m in range(M):
        l = list(map(int, input().split()))
        k.append(l[0])
        s.append(l[1:])
    p = list(map(int, input().split()))

    return N, M, k, s, p


def main(N: int, M: int, s: list, p: list) -> None:
    """
    メイン処理.

    Args:\n
        N (int): スイッチの数(1 <= N <= 10)
        M (int): 電球の数(1 <= M <= 10)
        s (list): 電球と繋がっているスイッチ(1 <= s_ij <= N)
        p (list): 点灯判定(0または1)
    """
    # 求解処理
    ans = 0
    for bit in range(1 << N):
        is_all_light_on = True
        for m in range(M):
            on_count = 0
            for s_i in s[m]:
                if ((bit >> (s_i - 1)) & 1):
                    on_count += 1
            if on_count % 2 != p[m]:
                is_all_light_on = False
                break
        if is_all_light_on:
            ans += 1

    # 結果出力
    print(ans)


if __name__ == "__main__":
    # 標準入力を取得
    N, M, k, s, p = get_input()

    # メイン処理
    main(N, M, s, p) def get_input() -> tuple:
    """
    標準入力を取得する.

    Returns:\n
        tuple: 標準入力
    """
    N, M = list(map(int, input().split()))
    k, s = [], []
    for m in range(M):
        l = list(map(int, input().split()))
        k.append(l[0])
        s.append(l[1:])
    p = list(map(int, input().split()))

    return N, M, k, s, p get_input """
    標準入力を取得する.

    Returns:\n
        tuple: 標準入力
    """ N, M = list(map(int, input().split())) N list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split M k, s = [], [] k [] s [] for m in range(M):
        l = list(map(int, input().split()))
        k.append(l[0])
        s.append(l[1:])
     m range(M) range M l = list(map(int, input().split())) l list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split k.append(l[0]) k.append k append l[0] l 0 s.append(l[1:]) s.append s append l[1:] l 1: 1 p = list(map(int, input().split())) p list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split return N, M, k, s, p return N, M, k, s, p N M k s p def main(N: int, M: int, s: list, p: list) -> None:
    """
    メイン処理.

    Args:\n
        N (int): スイッチの数(1 <= N <= 10)
        M (int): 電球の数(1 <= M <= 10)
        s (list): 電球と繋がっているスイッチ(1 <= s_ij <= N)
        p (list): 点灯判定(0または1)
    """
    # 求解処理
    ans = 0
    for bit in range(1 << N):
        is_all_light_on = True
        for m in range(M):
            on_count = 0
            for s_i in s[m]:
                if ((bit >> (s_i - 1)) & 1):
                    on_count += 1
            if on_count % 2 != p[m]:
                is_all_light_on = False
                break
        if is_all_light_on:
            ans += 1

    # 結果出力
    print(ans) main """
    メイン処理.

    Args:\n
        N (int): スイッチの数(1 <= N <= 10)
        M (int): 電球の数(1 <= M <= 10)
        s (list): 電球と繋がっているスイッチ(1 <= s_ij <= N)
        p (list): 点灯判定(0または1)
    """ ans = 0 ans 0 for bit in range(1 << N):
        is_all_light_on = True
        for m in range(M):
            on_count = 0
            for s_i in s[m]:
                if ((bit >> (s_i - 1)) & 1):
                    on_count += 1
            if on_count % 2 != p[m]:
                is_all_light_on = False
                break
        if is_all_light_on:
            ans += 1

    # 結果出力
     bit range(1 << N) range 1 << N 1 N is_all_light_on = True is_all_light_on True for m in range(M):
            on_count = 0
            for s_i in s[m]:
                if ((bit >> (s_i - 1)) & 1):
                    on_count += 1
            if on_count % 2 != p[m]:
                is_all_light_on = False
                break
         m range(M) range M on_count = 0 on_count 0 for s_i in s[m]:
                if ((bit >> (s_i - 1)) & 1):
                    on_count += 1
             s_i s[m] s m if ((bit >> (s_i - 1)) & 1):
                    on_count += 1
             (bit >> (s_i - 1)) & 1 bit >> (s_i - 1) bit s_i - 1 s_i 1 1 on_count += 1 on_count 1 if on_count % 2 != p[m]:
                is_all_light_on = False
                break
         on_count % 2 != p[m] on_count % 2 on_count 2 p[m] p m is_all_light_on = False is_all_light_on False break if is_all_light_on:
            ans += 1

    # 結果出力
     is_all_light_on ans += 1 ans 1 print(ans) print ans N: int N M: int M s: list s p: list p if __name__ == "__main__":
    # 標準入力を取得
    N, M, k, s, p = get_input()

    # メイン処理
    main(N, M, s, p) __name__ == "__main__" __name__ "__main__" N, M, k, s, p = get_input() N get_input() get_input M k s p main(N, M, s, p) main N M s p k, s, p = get_input() get_input() k def main(N: int, M: int, s: list, p: list) -> None:
    """
    メイン処理.

    Args:\n
        N (int): スイッチの数(1 <= N <= 10)
        M (int): 電球の数(1 <= M <= 10)
        s (list): 電球と繋がっているスイッチ(1 <= s_ij <= N)
        p (list): 点灯判定(0または1)
    """
    # 求解処理
    ans = 0
    for bit in range(1 << N):
        is_all_light_on = True
        for m in range(M):
            on_count = 0
            for s_i in s[m]:
                if ((bit >> (s_i - 1)) & 1):
                    on_count += 1
            if on_count % 2 != p[m]:
                is_all_light_on = False
                break
        if is_all_light_on:
            ans += 1

    # 結果出力
    print(ans) def main(N: int, M: int, s: list, p: list) -> None:
    """
    メイン処理.

    Args:\n
        N (int): スイッチの数(1 <= N <= 10)
        M (int): 電球の数(1 <= M <= 10)
        s (list): 電球と繋がっているスイッチ(1 <= s_ij <= N)
        p (list): 点灯判定(0または1)
    """
    # 求解処理
    ans = 0
    for bit in range(1 << N):
        is_all_light_on = True
        for m in range(M):
            on_count = 0
            for s_i in s[m]:
                if ((bit >> (s_i - 1)) & 1):
                    on_count += 1
            if on_count % 2 != p[m]:
                is_all_light_on = False
                break
        if is_all_light_on:
            ans += 1

    # 結果出力
    print(ans) main p = get_input() get_input() p s, p = get_input() get_input() s def get_input() -> tuple:
    """
    標準入力を取得する.

    Returns:\n
        tuple: 標準入力
    """
    N, M = list(map(int, input().split()))
    k, s = [], []
    for m in range(M):
        l = list(map(int, input().split()))
        k.append(l[0])
        s.append(l[1:])
    p = list(map(int, input().split()))

    return N, M, k, s, p def get_input() -> tuple:
    """
    標準入力を取得する.

    Returns:\n
        tuple: 標準入力
    """
    N, M = list(map(int, input().split()))
    k, s = [], []
    for m in range(M):
        l = list(map(int, input().split()))
        k.append(l[0])
        s.append(l[1:])
    p = list(map(int, input().split()))

    return N, M, k, s, p get_input N, M, k, s, p = get_input() get_input() N M, k, s, p = get_input() get_input() M
# -*- coding: utf-8 -*-

def get_input() -> tuple:
    """
    標準入力を取得する.

    Returns:\n
        tuple: 標準入力
    """
    N, M = list(map(int, input().split()))
    k, s = [], []
    for m in range(M):
        l = list(map(int, input().split()))
        k.append(l[0])
        s.append(l[1:])
    p = list(map(int, input().split()))

    return N, M, k, s, p


def main(N: int, M: int, s: list, p: list) -> None:
    """
    メイン処理.

    Args:\n
        N (int): スイッチの数(1 <= N <= 10)
        M (int): 電球の数(1 <= M <= 10)
        s (list): 電球と繋がっているスイッチ(1 <= s_ij <= N)
        p (list): 点灯判定(0または1)
    """
    # 求解処理
    ans = 0
    for bit in range(1 << N):
        is_all_light_on = True
        for m in range(M):
            on_count = 0
            for s_i in s[m]:
                if ((bit >> (s_i - 1)) & 1):
                    on_count += 1
            if on_count % 2 != p[m]:
                is_all_light_on = False
                break
        if is_all_light_on:
            ans += 1

    # 結果出力
    print(ans)


if __name__ == "__main__":
    # 標準入力を取得
    N, M, k, s, p = get_input()

    # メイン処理
    main(N, M, s, p)
