n, m = map(int, input().split())
s_lis = []

#ON/OFFのパターン
for i in range(2 ** n) :
    lis = []
    for j in range(len(bin(2 ** n)) - 3) :
        if (i >> j) & 1 :
            lis.append(1)
        else:
            lis.append(0)
    
    s_lis.append(lis)

#各電球の接続
b_lis = []
for k in range(m) :
    b_lis.append(list(map(int, input().split())))

#点灯条件
light = list(map(int, input().split()))

#各電球の合計
cnt = 0
for s in s_lis :
    c_lis = []
    for b in b_lis :
        c = 0
        for x in range(b[0]) :
            c += s[b[x + 1] - 1]
        c_lis.append(c)
    
    c_lis = list(map(lambda y : y % 2, c_lis))
    if c_lis == light :
        cnt += 1

print(cnt) n, m = map(int, input().split()) n map(int, input().split()) map int input().split() ().split () input split m s_lis = [] s_lis [] for i in range(2 ** n) :
    lis = []
    for j in range(len(bin(2 ** n)) - 3) :
        if (i >> j) & 1 :
            lis.append(1)
        else:
            lis.append(0)
    
    s_lis.append(lis)

#各電球の接続 i range(2 ** n) range 2 ** n 2 n lis = [] lis [] for j in range(len(bin(2 ** n)) - 3) :
        if (i >> j) & 1 :
            lis.append(1)
        else:
            lis.append(0)
    
     j range(len(bin(2 ** n)) - 3) range len(bin(2 ** n)) - 3 len(bin(2 ** n)) len bin(2 ** n) bin 2 ** n 2 n 3 if (i >> j) & 1 :
            lis.append(1)
        else:
            lis.append(0)
    
     (i >> j) & 1 i >> j i j 1 lis.append(1) lis.append lis append 1 lis.append(0) lis.append lis append 0 s_lis.append(lis) s_lis.append s_lis append lis b_lis = [] b_lis [] for k in range(m) :
    b_lis.append(list(map(int, input().split())))

#点灯条件 k range(m) range m b_lis.append(list(map(int, input().split()))) b_lis.append b_lis append list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split light = list(map(int, input().split())) light list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split cnt = 0 cnt 0 for s in s_lis :
    c_lis = []
    for b in b_lis :
        c = 0
        for x in range(b[0]) :
            c += s[b[x + 1] - 1]
        c_lis.append(c)
    
    c_lis = list(map(lambda y : y % 2, c_lis))
    if c_lis == light :
        cnt += 1 s s_lis c_lis = [] c_lis [] for b in b_lis :
        c = 0
        for x in range(b[0]) :
            c += s[b[x + 1] - 1]
        c_lis.append(c)
    
     b b_lis c = 0 c 0 for x in range(b[0]) :
            c += s[b[x + 1] - 1]
         x range(b[0]) range b[0] b 0 c += s[b[x + 1] - 1] c s[b[x + 1] - 1] s b[x + 1] - 1 b[x + 1] b x + 1 x 1 1 c_lis.append(c) c_lis.append c_lis append c c_lis = list(map(lambda y : y % 2, c_lis)) c_lis list(map(lambda y : y % 2, c_lis)) list map(lambda y : y % 2, c_lis) map lambda y : y % 2 y % 2 y 2 y c_lis if c_lis == light :
        cnt += 1 c_lis == light c_lis light cnt += 1 cnt 1 print(cnt) print cnt lis = [] [] lis n, m = map(int, input().split()) map(int, input().split()) n m = map(int, input().split()) map(int, input().split()) m s_lis = [] [] s_lis c += s[b[x + 1] - 1] s[b[x + 1] - 1] c cnt += 1 1 cnt c_lis = [] [] c_lis b_lis = [] [] b_lis c = 0 0 c light = list(map(int, input().split())) list(map(int, input().split())) light cnt = 0 0 cnt c_lis = list(map(lambda y : y % 2, c_lis)) list(map(lambda y : y % 2, c_lis)) c_lis
n, m = map(int, input().split())
s_lis = []

#ON/OFFのパターン
for i in range(2 ** n) :
    lis = []
    for j in range(len(bin(2 ** n)) - 3) :
        if (i >> j) & 1 :
            lis.append(1)
        else:
            lis.append(0)
    
    s_lis.append(lis)

#各電球の接続
b_lis = []
for k in range(m) :
    b_lis.append(list(map(int, input().split())))

#点灯条件
light = list(map(int, input().split()))

#各電球の合計
cnt = 0
for s in s_lis :
    c_lis = []
    for b in b_lis :
        c = 0
        for x in range(b[0]) :
            c += s[b[x + 1] - 1]
        c_lis.append(c)
    
    c_lis = list(map(lambda y : y % 2, c_lis))
    if c_lis == light :
        cnt += 1

print(cnt)