#入力:[n1,n2,...nk](int:整数配列)
def input_array():
	return list(map(int,input().split()))
  
n,m=map(int,input().split())
k=[]
s=[]
for _ in range(m):
	tmp=input_array()
	k.append(tmp[0])
	s.append(tmp[1:])
p=input_array()
ans=0
for i in range(2**n):
	tmp=[]
	ans_tmp=0
	for j in range(n):
		tmp.append(i>>j&1)
	for c in range(m): # スイッチのチェック
		sw=s[c]
		sum_sw=0
		for l in sw:
			if tmp[l-1]==1:
				sum_sw+=1
		if sum_sw%2==p[c]:
			ans_tmp+=1
	if ans_tmp==m:
		ans+=1

print(ans) def input_array():
	return list(map(int,input().split()))
   input_array return list(map(int,input().split())) list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split n,m=map(int,input().split()) n map(int,input().split()) map int input().split() ().split () input split m k=[] k [] s=[] s [] for _ in range(m):
	tmp=input_array()
	k.append(tmp[0])
	s.append(tmp[1:]) _ range(m) range m tmp=input_array() tmp input_array() input_array k.append(tmp[0]) k.append k append tmp[0] tmp 0 s.append(tmp[1:]) s.append s append tmp[1:] tmp 1: 1 p=input_array() p input_array() input_array ans=0 ans 0 for i in range(2**n):
	tmp=[]
	ans_tmp=0
	for j in range(n):
		tmp.append(i>>j&1)
	for c in range(m): # スイッチのチェック
		sw=s[c]
		sum_sw=0
		for l in sw:
			if tmp[l-1]==1:
				sum_sw+=1
		if sum_sw%2==p[c]:
			ans_tmp+=1
	if ans_tmp==m:
		ans+=1 i range(2**n) range 2**n 2 n tmp=[] tmp [] ans_tmp=0 ans_tmp 0 for j in range(n):
		tmp.append(i>>j&1)
	 j range(n) range n tmp.append(i>>j&1) tmp.append tmp append i>>j&1 i>>j i j 1 for c in range(m): # スイッチのチェック
		sw=s[c]
		sum_sw=0
		for l in sw:
			if tmp[l-1]==1:
				sum_sw+=1
		if sum_sw%2==p[c]:
			ans_tmp+=1
	 c range(m) range m sw=s[c] sw s[c] s c sum_sw=0 sum_sw 0 for l in sw:
			if tmp[l-1]==1:
				sum_sw+=1
		 l sw if tmp[l-1]==1:
				sum_sw+=1
		 tmp[l-1]==1 tmp[l-1] tmp l-1 l 1 1 sum_sw+=1 sum_sw 1 if sum_sw%2==p[c]:
			ans_tmp+=1
	 sum_sw%2==p[c] sum_sw%2 sum_sw 2 p[c] p c ans_tmp+=1 ans_tmp 1 if ans_tmp==m:
		ans+=1 ans_tmp==m ans_tmp m ans+=1 ans 1 print(ans) print ans n,m=map(int,input().split()) map(int,input().split()) n sw=s[c] s[c] sw tmp=[] [] tmp ans_tmp=0 0 ans_tmp sum_sw+=1 1 sum_sw s=[] [] s sum_sw=0 0 sum_sw m=map(int,input().split()) map(int,input().split()) m def input_array():
	return list(map(int,input().split()))
   def input_array():
	return list(map(int,input().split()))
   input_array tmp=input_array() input_array() tmp ans=0 0 ans p=input_array() input_array() p ans_tmp+=1 1 ans_tmp k=[] [] k ans+=1 1 ans
#入力:[n1,n2,...nk](int:整数配列)
def input_array():
	return list(map(int,input().split()))
  
n,m=map(int,input().split())
k=[]
s=[]
for _ in range(m):
	tmp=input_array()
	k.append(tmp[0])
	s.append(tmp[1:])
p=input_array()
ans=0
for i in range(2**n):
	tmp=[]
	ans_tmp=0
	for j in range(n):
		tmp.append(i>>j&1)
	for c in range(m): # スイッチのチェック
		sw=s[c]
		sum_sw=0
		for l in sw:
			if tmp[l-1]==1:
				sum_sw+=1
		if sum_sw%2==p[c]:
			ans_tmp+=1
	if ans_tmp==m:
		ans+=1

print(ans)