N,M=map(int,input().split())
k=[]
s=[]
for i in range(M):
    ks=list(map(int,input().split()))
    k.append(ks[0])
    s.append(list(map(lambda x:x-1,ks[1:])))
p=list(map(int,input().split()))

ans=0
for i in range(2**N):
    isOK=True

    for j in range(M):
        sum=0
        for x in s[j]:
            sum+=(i>>x)&1
        
        if sum%2!=p[j]:
            isOK=False
    
    if isOK:
        ans+=1

print(ans) N,M=map(int,input().split()) N map(int,input().split()) map int input().split() ().split () input split M k=[] k [] s=[] s [] for i in range(M):
    ks=list(map(int,input().split()))
    k.append(ks[0])
    s.append(list(map(lambda x:x-1,ks[1:]))) i range(M) range M ks=list(map(int,input().split())) ks list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split k.append(ks[0]) k.append k append ks[0] ks 0 s.append(list(map(lambda x:x-1,ks[1:]))) s.append s append list(map(lambda x:x-1,ks[1:])) list map(lambda x:x-1,ks[1:]) map lambda x:x-1 x-1 x 1 x ks[1:] ks 1: 1 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):
    isOK=True

    for j in range(M):
        sum=0
        for x in s[j]:
            sum+=(i>>x)&1
        
        if sum%2!=p[j]:
            isOK=False
    
    if isOK:
        ans+=1 i range(2**N) range 2**N 2 N isOK=True isOK True for j in range(M):
        sum=0
        for x in s[j]:
            sum+=(i>>x)&1
        
        if sum%2!=p[j]:
            isOK=False
    
     j range(M) range M sum=0 sum 0 for x in s[j]:
            sum+=(i>>x)&1
        
         x s[j] s j sum+=(i>>x)&1 sum (i>>x)&1 i>>x i x 1 if sum%2!=p[j]:
            isOK=False
    
     sum%2!=p[j] sum%2 sum 2 p[j] p j isOK=False isOK False if isOK:
        ans+=1 isOK ans+=1 ans 1 print(ans) print ans isOK=False False isOK k=[] [] k isOK=True True isOK sum=0 0 sum ans+=1 1 ans p=list(map(int,input().split())) list(map(int,input().split())) p M=map(int,input().split()) map(int,input().split()) M N,M=map(int,input().split()) map(int,input().split()) N ks=list(map(int,input().split())) list(map(int,input().split())) ks s=[] [] s sum+=(i>>x)&1 (i>>x)&1 sum ans=0 0 ans
N,M=map(int,input().split())
k=[]
s=[]
for i in range(M):
    ks=list(map(int,input().split()))
    k.append(ks[0])
    s.append(list(map(lambda x:x-1,ks[1:])))
p=list(map(int,input().split()))

ans=0
for i in range(2**N):
    isOK=True

    for j in range(M):
        sum=0
        for x in s[j]:
            sum+=(i>>x)&1
        
        if sum%2!=p[j]:
            isOK=False
    
    if isOK:
        ans+=1

print(ans)