# -*- 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_m, s_m = l[0], l[1:]

        k.append(k_m)

        s.append(s_m)

    p = list(map(int, input().split()))



    return N, M, k, s, p





def lights_on(M: int, s: list, p: list, switches: int) -> bool:

    """

    電球がすべて点灯しているかどうかを確認する.



    Args:\n

        M (int): 電球の数

        s (list): 電球に対応するスイッチ

        p (list): スイッチと電球の点灯の関係

        switches (int): スイッチの状態



    Returns:\n

        bool: 電球がすべて点灯していれば真、そうでなければ偽

    """

    result = True

    for m in range(M):

        switch_on_count = 0

        for s_m_km in s[m]:

            if switches & (1 << (s_m_km - 1)):

                switch_on_count += 1

        if switch_on_count % 2 != p[m]:

            result = False



    return result





def main(N: int, M: int, s: list, p: list) -> None:

    """

    メイン処理.



    Args:\n

        N (int): スイッチの数

        M (int): 電球の数

        s (list): 電球に対応するスイッチ

        p (list): スイッチと電球の点灯の関係

    """

    # 求解処理

    ans = 0

    for switches in range(1 << N):

        if lights_on(M, s, p, switches):

            ans += 1



    # 結果出力

    print(ans)





if __name__ == "__main__":

    # 標準入力を取得

    N, M, k, s, p = get_input()



    # メイン処理

    main(N, M, s, p)

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

# 標準入力を取得

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()))



# 求解処理

ans = 0

for bit in range(1 << N):

    is_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_light_on = False

            break

    if is_light_on:

        ans += 1



# 結果出力

print(ans)

# -*- 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_m, s_m = l[0], l[1:]
        k.append(k_m)
        s.append(s_m)
    p = list(map(int, input().split()))
    return N, M, k, s, p


def lights_on(M: int, s: list, p: list, switches: int) -> bool:
    """
    電球がすべて点灯しているかどうかを確認する.
    Args:\n
        M (int): 電球の数
        s (list): 電球に対応するスイッチ
        p (list): スイッチと電球の点灯の関係
        switches (int): スイッチの状態
    Returns:\n
        bool: 電球がすべて点灯していれば真、そうでなければ偽
    """
    result = True
    for m in range(M):
        switch_on_count = 0
        for s_m_km in s[m]:
            if switches & (1 << (s_m_km - 1)):
                switch_on_count += 1
        if switch_on_count % 2 != p[m]:
            result = False
    return result


def main(N: int, M: int, s: list, p: list) -> None:
    """
    メイン処理.
    Args:\n
        N (int): スイッチの数
        M (int): 電球の数
        s (list): 電球に対応するスイッチ
        p (list): スイッチと電球の点灯の関係
    """
    # 求解処理
    ans = 0
    for switches in range(1 << N):
        if lights_on(M, s, p, switches):
            ans += 1
    # 結果出力
    print(ans)


if __name__ == "__main__":
    # 標準入力を取得
    N, M, k, s, p = get_input()
    # メイン処理
    main(N, M, s, p)

# -*- coding: utf-8 -*-
# 標準入力を取得
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()))
# 求解処理
ans = 0
for bit in range(1 << N):
    is_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_light_on = False
            break
    if is_light_on:
        ans += 1
# 結果出力
print(ans)

-def get_input() -> tuple: -    """ -    標準入力を取得する. -    Returns:\n -        tuple: 標準入力 -    """ -    # 標準入力を取得 -    N, M = list(map(int, input().split())) -    k, s = [], [] +# 標準入力を取得 +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())) +# 求解処理 +ans = 0 +for bit in range(1 << N): +    is_light_on = True -        l = list(map(int, input().split())) -        k_m, s_m = l[0], l[1:] -        k.append(k_m) -        s.append(s_m) -    p = list(map(int, input().split())) -    return N, M, k, s, p - - -def lights_on(M: int, s: list, p: list, switches: int) -> bool: -    """ -    電球がすべて点灯しているかどうかを確認する. -    Args:\n -        M (int): 電球の数 -        s (list): 電球に対応するスイッチ -        p (list): スイッチと電球の点灯の関係 -        switches (int): スイッチの状態 -    Returns:\n -        bool: 電球がすべて点灯していれば真、そうでなければ偽 -    """ -    result = True -    for m in range(M): -        switch_on_count = 0 -        for s_m_km in s[m]: -            if switches & (1 << (s_m_km - 1)): -                switch_on_count += 1 -        if switch_on_count % 2 != p[m]: -            result = False -    return result - - -def main(N: int, M: int, s: list, p: list) -> None: -    """ -    メイン処理. -    Args:\n -        N (int): スイッチの数 -        M (int): 電球の数 -        s (list): 電球に対応するスイッチ -        p (list): スイッチと電球の点灯の関係 -    """ -    # 求解処理 -    ans = 0 -    for switches in range(1 << N): -        if lights_on(M, s, p, switches): -            ans += 1 -    # 結果出力 -    print(ans) - - -if __name__ == "__main__": -    # 標準入力を取得 -    N, M, k, s, p = get_input() -    # メイン処理 -    main(N, M, s, p) +        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_light_on = False +            break +    if is_light_on: +        ans += 1 +# 結果出力 +print(ans)