#入力

N, M = list(map(int, input().split()))



#入力: 電球iについての情報

lst = []

for i in range(M):

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

    lst += [a]

#入力: どのような情報であればOKかのリスト

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



# print ('lst', lst)



#計算部分

ans = 0 #全探索用の答え

for i in range(2 ** N): #1をon, 0をoffとする2bit

    #最大でもスイッチは10桁＋2進数であることを表す部分2桁

    a = format(i, '012b')

    #2進数をリストとして保存, 前2桁は2進数であることを表す部分のため不要 

    lst2 = list(a[2:]) #右からスイッチ1, 2, ... Nと逆順になっていることに注意

    # print ('lst2', lst2)

    #あるスイッチの付け方が題意を満たしているか判断するフラグ

    flag = True 

    l = 0 #電球番号-1(リストのため)

    for j in lst: #i番目のスイッチの繋がっていることの情報

        # print ('j[1:]', j[1:])

        count = 0 #ONのスイッチの個数を数える

        for k in j[1:]: #s_i番目のスイッチの状態を読み出す、最初の一桁はスイッチの数

            # print ('k', k)

            if lst2[9-k+1] == '1': #ONの時、カウントを増やす

                count += 1

                # print ('B')

        # print ('count', count)

        # print ('p[l]', p[l])

        if count%2 != p[l]: #ONになっているスイッチの数//2が題意を満たしているかを判断

            flag = False #題意を満たしていなかったらフラグをFalseにする

            # print ('C')

        l += 1 #電球番号を一つ増やす

    if flag: #全ての電球を確認して、フラグがまだTrueなら答えを+1

        ans += 1

        # print ('A')



print (ans)
N, M = list(map(int, input().split()))

lst = [list(map(int, input().split())) for i in range(M)]

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



count = 0

#bit全探索

for i in range(2**N): #スイッチの状態をbit-全探索

    c = [0] * M

    for j in range(N): #j桁目を確認

        if (i >> j) & 1: #j桁目 = j個目のスイッチがONの時

            for k in range(M): #M個の電球に対して確認

                if j+1 in lst[k][1:]:

                    c[k] += 1

    flag = True

    for l in range(M):

        if c[l]%2 != p[l]:

            flag = False

    if flag:

        count += 1





print (count)





# 入力
N, M = list(map(int, input().split()))
# 入力: 電球iについての情報
lst = []
for i in range(M):
    a = list(map(int, input().split()))
    lst += [a]
# 入力: どのような情報であればOKかのリスト
p = list(map(int, input().split()))
# print ('lst', lst)
# 計算部分
ans = 0  # 全探索用の答え
for i in range(2**N):  # 1をon, 0をoffとする2bit
    # 最大でもスイッチは10桁＋2進数であることを表す部分2桁
    a = format(i, "012b")
    # 2進数をリストとして保存, 前2桁は2進数であることを表す部分のため不要
    lst2 = list(a[2:])  # 右からスイッチ1, 2, ... Nと逆順になっていることに注意
    # print ('lst2', lst2)
    # あるスイッチの付け方が題意を満たしているか判断するフラグ
    flag = True
    l = 0  # 電球番号-1(リストのため)
    for j in lst:  # i番目のスイッチの繋がっていることの情報
        # print ('j[1:]', j[1:])
        count = 0  # ONのスイッチの個数を数える
        for k in j[1:]:  # s_i番目のスイッチの状態を読み出す、最初の一桁はスイッチの数
            # print ('k', k)
            if lst2[9 - k + 1] == "1":  # ONの時、カウントを増やす
                count += 1
                # print ('B')
        # print ('count', count)
        # print ('p[l]', p[l])
        if count % 2 != p[l]:  # ONになっているスイッチの数//2が題意を満たしているかを判断
            flag = False  # 題意を満たしていなかったらフラグをFalseにする
            # print ('C')
        l += 1  # 電球番号を一つ増やす
    if flag:  # 全ての電球を確認して、フラグがまだTrueなら答えを+1
        ans += 1
        # print ('A')
print(ans)

N, M = list(map(int, input().split()))
lst = [list(map(int, input().split())) for i in range(M)]
p = list(map(int, input().split()))
count = 0
# bit全探索
for i in range(2**N):  # スイッチの状態をbit-全探索
    c = [0] * M
    for j in range(N):  # j桁目を確認
        if (i >> j) & 1:  # j桁目 = j個目のスイッチがONの時
            for k in range(M):  # M個の電球に対して確認
                if j + 1 in lst[k][1:]:
                    c[k] += 1
    flag = True
    for l in range(M):
        if c[l] % 2 != p[l]:
            flag = False
    if flag:
        count += 1
print(count)

-# 入力 -# 入力: 電球iについての情報 -lst = [] -for i in range(M): -    a = list(map(int, input().split())) -    lst += [a] -# 入力: どのような情報であればOKかのリスト +lst = [list(map(int, input().split())) for i in range(M)] -# print ('lst', lst) -# 計算部分 -ans = 0  # 全探索用の答え -for i in range(2**N):  # 1をon, 0をoffとする2bit -    # 最大でもスイッチは10桁＋2進数であることを表す部分2桁 -    a = format(i, "012b") -    # 2進数をリストとして保存, 前2桁は2進数であることを表す部分のため不要 -    lst2 = list(a[2:])  # 右からスイッチ1, 2, ... Nと逆順になっていることに注意 -    # print ('lst2', lst2) -    # あるスイッチの付け方が題意を満たしているか判断するフラグ +count = 0 +# bit全探索 +for i in range(2**N):  # スイッチの状態をbit-全探索 +    c = [0] * M +    for j in range(N):  # j桁目を確認 +        if (i >> j) & 1:  # j桁目 = j個目のスイッチがONの時 +            for k in range(M):  # M個の電球に対して確認 +                if j + 1 in lst[k][1:]: +                    c[k] += 1 -    l = 0  # 電球番号-1(リストのため) -    for j in lst:  # i番目のスイッチの繋がっていることの情報 -        # print ('j[1:]', j[1:]) -        count = 0  # ONのスイッチの個数を数える -        for k in j[1:]:  # s_i番目のスイッチの状態を読み出す、最初の一桁はスイッチの数 -            # print ('k', k) -            if lst2[9 - k + 1] == "1":  # ONの時、カウントを増やす -                count += 1 -                # print ('B') -        # print ('count', count) -        # print ('p[l]', p[l]) -        if count % 2 != p[l]:  # ONになっているスイッチの数//2が題意を満たしているかを判断 -            flag = False  # 題意を満たしていなかったらフラグをFalseにする -            # print ('C') -        l += 1  # 電球番号を一つ増やす -    if flag:  # 全ての電球を確認して、フラグがまだTrueなら答えを+1 -        ans += 1 -        # print ('A') -print(ans) +    for l in range(M): +        if c[l] % 2 != p[l]: +            flag = False +    if flag: +        count += 1 +print(count)