"""
ビット全探索
"""
n, m = map(int, input().split())
lamps = [list(map(lambda x:int(x)-1, input().split()))[1:] for _ in range(m)]
p = list(map(int, input().split()))
ans = 0
#ビット全探索
for i in range(2**n) :
    for r in range(m) :
        on = 0
        for j in range(n) :
            #j桁目が1であるかどうかを調べる
            #jがsに含まれているかどうか調べる
            if (i>>j) & 1 == 1 and j in lamps[r] :
                on += 1
        if on % 2 != p[r] :
            break
    else :
        ans += 1
print(ans) """
ビット全探索
""" n, m = map(int, input().split()) n map(int, input().split()) map int input().split() ().split () input split m list(map(lambda x:int(x)-1, input().split()))[1:] for _ in range(m) for _ in range(m) _ range(m) range m for _ in range(m) list(map(lambda x:int(x)-1, input().split()))[1:] (map(lambda x:int(x)-1, input().split())) list map(lambda x:int(x)-1, input().split()) map lambda x:int(x)-1 int(x)-1 int(x) int x 1 x input().split() ().split () input split 1: 1 lamps = [list(map(lambda x:int(x)-1, input().split()))[1:] for _ in range(m)] lamps [list(map(lambda x:int(x)-1, input().split()))[1:] for _ in range(m)] p = list(map(int, input().split())) p list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split ans = 0 ans 0 for i in range(2**n) :
    for r in range(m) :
        on = 0
        for j in range(n) :
            #j桁目が1であるかどうかを調べる
            #jがsに含まれているかどうか調べる
            if (i>>j) & 1 == 1 and j in lamps[r] :
                on += 1
        if on % 2 != p[r] :
            break
    else :
        ans += 1 i range(2**n) range 2**n 2 n for r in range(m) :
        on = 0
        for j in range(n) :
            #j桁目が1であるかどうかを調べる
            #jがsに含まれているかどうか調べる
            if (i>>j) & 1 == 1 and j in lamps[r] :
                on += 1
        if on % 2 != p[r] :
            break
    else :
        ans += 1 r range(m) range m on = 0 on 0 for j in range(n) :
            #j桁目が1であるかどうかを調べる
            #jがsに含まれているかどうか調べる
            if (i>>j) & 1 == 1 and j in lamps[r] :
                on += 1
         j range(n) range n if (i>>j) & 1 == 1 and j in lamps[r] :
                on += 1
         (i>>j) & 1 == 1 and j in lamps[r] (i>>j) & 1 == 1 (i>>j) & 1 i>>j i j 1 1 j in lamps[r] j lamps[r] lamps r on += 1 on 1 if on % 2 != p[r] :
            break
     on % 2 != p[r] on % 2 on 2 p[r] p r break ans += 1 ans 1 print(ans) print ans m = map(int, input().split()) map(int, input().split()) m on = 0 0 on ans += 1 1 ans lamps = [list(map(lambda x:int(x)-1, input().split()))[1:] for _ in range(m)] [list(map(lambda x:int(x)-1, input().split()))[1:] for _ in range(m)] lamps ans = 0 0 ans n, m = map(int, input().split()) map(int, input().split()) n p = list(map(int, input().split())) list(map(int, input().split())) p on += 1 1 on
"""
ビット全探索
"""
n, m = map(int, input().split())
lamps = [list(map(lambda x:int(x)-1, input().split()))[1:] for _ in range(m)]
p = list(map(int, input().split()))
ans = 0
#ビット全探索
for i in range(2**n) :
    for r in range(m) :
        on = 0
        for j in range(n) :
            #j桁目が1であるかどうかを調べる
            #jがsに含まれているかどうか調べる
            if (i>>j) & 1 == 1 and j in lamps[r] :
                on += 1
        if on % 2 != p[r] :
            break
    else :
        ans += 1
print(ans)
