# C - Switches
#bit全探索の練習問題
import copy

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

ks = []
for l in range(M):
    s = input().split()
    ks.append(s)
p = list(map(int, input().split()))

KS = []
for m in range(M):#列の数はМ
    box = list()
    for n in range(len(ks[m])):#M列の要素を数字に直す処理
        ks[m][n] = int(ks[m][n])
        box.append(ks[m][n])
    KS.append(box)            

swich = []
for o in range(M):#列の数はМ
    swi = list()
    for r in range(1,len(KS[o])):#k以外を取り出す
        swi.append(ks[o][r])
    swich.append(swi)
           
ans = 0
for i in range(1<<N):#全パターンは2**(スイッチの総数)
    SWICH = copy.deepcopy(swich)
    light_on = 0
    for j in range(N):
        mask = 1<< j#1をj個左にずらした2進数
        if i & mask != 0:#スイッチjがonの時
            continue
        else:#スイッチjがoffの時
            for y in range(M):#電球iごとに繰り返し
                if (j+1 in SWICH[y]) == True:#スイッチsiが電球iに接続されているとき
                    SWICH[y].remove(j+1)

    #onのみがSWICHに入っている
    flat_SWICH = []
    for a in range(len(SWICH)):
        for b in range(len(SWICH[a])):
            flat_SWICH.append(SWICH[a][b])
            
    for x in range(M):
        if (len(SWICH[x]) % 2) == p[x]:#onのスイッチの数を2で割った余りがPの値と等しい時
            light_on += 1
    if light_on == M:#onの電球の個数がMと等しい(全てon)時
        ans += 1
print(ans) import copy copy N,M = input().split() N input().split() ().split () input split M N = int(N) N int(N) int N M = int(M) M int(M) int M ks = [] ks [] for l in range(M):
    s = input().split()
    ks.append(s) l range(M) range M s = input().split() s input().split() ().split () input split ks.append(s) ks.append ks append s p = list(map(int, input().split())) p list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split KS = [] KS [] for m in range(M):#列の数はМ
    box = list()
    for n in range(len(ks[m])):#M列の要素を数字に直す処理
        ks[m][n] = int(ks[m][n])
        box.append(ks[m][n])
    KS.append(box)             m range(M) range M box = list() box list() list for n in range(len(ks[m])):#M列の要素を数字に直す処理
        ks[m][n] = int(ks[m][n])
        box.append(ks[m][n])
     n range(len(ks[m])) range len(ks[m]) len ks[m] ks m ks[m][n] = int(ks[m][n]) ks[m][n] [m] ks m n int(ks[m][n]) int ks[m][n] [m] ks m n box.append(ks[m][n]) box.append box append ks[m][n] [m] ks m n KS.append(box) KS.append KS append box swich = [] swich [] for o in range(M):#列の数はМ
    swi = list()
    for r in range(1,len(KS[o])):#k以外を取り出す
        swi.append(ks[o][r])
    swich.append(swi)
            o range(M) range M swi = list() swi list() list for r in range(1,len(KS[o])):#k以外を取り出す
        swi.append(ks[o][r])
     r range(1,len(KS[o])) range 1 len(KS[o]) len KS[o] KS o swi.append(ks[o][r]) swi.append swi append ks[o][r] [o] ks o r swich.append(swi) swich.append swich append swi ans = 0 ans 0 for i in range(1<<N):#全パターンは2**(スイッチの総数)
    SWICH = copy.deepcopy(swich)
    light_on = 0
    for j in range(N):
        mask = 1<< j#1をj個左にずらした2進数
        if i & mask != 0:#スイッチjがonの時
            continue
        else:#スイッチjがoffの時
            for y in range(M):#電球iごとに繰り返し
                if (j+1 in SWICH[y]) == True:#スイッチsiが電球iに接続されているとき
                    SWICH[y].remove(j+1)

    #onのみがSWICHに入っている
    flat_SWICH = []
    for a in range(len(SWICH)):
        for b in range(len(SWICH[a])):
            flat_SWICH.append(SWICH[a][b])
            
    for x in range(M):
        if (len(SWICH[x]) % 2) == p[x]:#onのスイッチの数を2で割った余りがPの値と等しい時
            light_on += 1
    if light_on == M:#onの電球の個数がMと等しい(全てon)時
        ans += 1 i range(1<<N) range 1<<N 1 N SWICH = copy.deepcopy(swich) SWICH copy.deepcopy(swich) copy.deepcopy copy deepcopy swich light_on = 0 light_on 0 for j in range(N):
        mask = 1<< j#1をj個左にずらした2進数
        if i & mask != 0:#スイッチjがonの時
            continue
        else:#スイッチjがoffの時
            for y in range(M):#電球iごとに繰り返し
                if (j+1 in SWICH[y]) == True:#スイッチsiが電球iに接続されているとき
                    SWICH[y].remove(j+1)

    #onのみがSWICHに入っている
     j range(N) range N mask = 1<< j mask 1<< j 1 j if i & mask != 0:#スイッチjがonの時
            continue
        else:#スイッチjがoffの時
            for y in range(M):#電球iごとに繰り返し
                if (j+1 in SWICH[y]) == True:#スイッチsiが電球iに接続されているとき
                    SWICH[y].remove(j+1)

    #onのみがSWICHに入っている
     i & mask != 0 i & mask i mask 0 continue for y in range(M):#電球iごとに繰り返し
                if (j+1 in SWICH[y]) == True:#スイッチsiが電球iに接続されているとき
                    SWICH[y].remove(j+1)

    #onのみがSWICHに入っている
     y range(M) range M if (j+1 in SWICH[y]) == True:#スイッチsiが電球iに接続されているとき
                    SWICH[y].remove(j+1)

    #onのみがSWICHに入っている
     (j+1 in SWICH[y]) == True j+1 in SWICH[y] j+1 j 1 SWICH[y] SWICH y True SWICH[y].remove(j+1) [y].remove [y] SWICH y remove j+1 j 1 flat_SWICH = [] flat_SWICH [] for a in range(len(SWICH)):
        for b in range(len(SWICH[a])):
            flat_SWICH.append(SWICH[a][b])
            
     a range(len(SWICH)) range len(SWICH) len SWICH for b in range(len(SWICH[a])):
            flat_SWICH.append(SWICH[a][b])
            
     b range(len(SWICH[a])) range len(SWICH[a]) len SWICH[a] SWICH a flat_SWICH.append(SWICH[a][b]) flat_SWICH.append flat_SWICH append SWICH[a][b] [a] SWICH a b for x in range(M):
        if (len(SWICH[x]) % 2) == p[x]:#onのスイッチの数を2で割った余りがPの値と等しい時
            light_on += 1
     x range(M) range M if (len(SWICH[x]) % 2) == p[x]:#onのスイッチの数を2で割った余りがPの値と等しい時
            light_on += 1
     (len(SWICH[x]) % 2) == p[x] len(SWICH[x]) % 2 len(SWICH[x]) len SWICH[x] SWICH x 2 p[x] p x light_on += 1 light_on 1 if light_on == M:#onの電球の個数がMと等しい(全てon)時
        ans += 1 light_on == M light_on M ans += 1 ans 1 print(ans) print ans ans = 0 0 ans s = input().split() input().split() s light_on = 0 0 light_on ans += 1 1 ans KS = [] [] KS swich = [] [] swich swi = list() list() swi M = int(M) int(M) M ks = [] [] ks flat_SWICH = [] [] flat_SWICH SWICH = copy.deepcopy(swich) copy.deepcopy(swich) SWICH light_on += 1 1 light_on M = input().split() input().split() M N = int(N) int(N) N box = list() list() box N,M = input().split() input().split() N p = list(map(int, input().split())) list(map(int, input().split())) p mask = 1<< j 1<< j mask
# C - Switches
#bit全探索の練習問題
import copy

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

ks = []
for l in range(M):
    s = input().split()
    ks.append(s)
p = list(map(int, input().split()))

KS = []
for m in range(M):#列の数はМ
    box = list()
    for n in range(len(ks[m])):#M列の要素を数字に直す処理
        ks[m][n] = int(ks[m][n])
        box.append(ks[m][n])
    KS.append(box)            

swich = []
for o in range(M):#列の数はМ
    swi = list()
    for r in range(1,len(KS[o])):#k以外を取り出す
        swi.append(ks[o][r])
    swich.append(swi)
           
ans = 0
for i in range(1<<N):#全パターンは2**(スイッチの総数)
    SWICH = copy.deepcopy(swich)
    light_on = 0
    for j in range(N):
        mask = 1<< j#1をj個左にずらした2進数
        if i & mask != 0:#スイッチjがonの時
            continue
        else:#スイッチjがoffの時
            for y in range(M):#電球iごとに繰り返し
                if (j+1 in SWICH[y]) == True:#スイッチsiが電球iに接続されているとき
                    SWICH[y].remove(j+1)

    #onのみがSWICHに入っている
    flat_SWICH = []
    for a in range(len(SWICH)):
        for b in range(len(SWICH[a])):
            flat_SWICH.append(SWICH[a][b])
            
    for x in range(M):
        if (len(SWICH[x]) % 2) == p[x]:#onのスイッチの数を2で割った余りがPの値と等しい時
            light_on += 1
    if light_on == M:#onの電球の個数がMと等しい(全てon)時
        ans += 1
print(ans)