#include<fstream.h>
typedef int set[1025];
ifstream fin("balanta.in");
ofstream fout("balanta.out");
int n,st[1025],dr[1025];
set u,g;
int apartenenta(int x, set a){
return a[x];
}
void intersectie(set a,set b,set c){
c[0]=0;
for(int i=1;i<=a[0];i++)
if(apartenenta(a[i],b)){
c[0]++;
c[c[0]]=a[i];
}
}
void copy(set d,set s){
for(int i=0;i<=s[0];i++) d[i]=s[i];
}
void dif(set a,set b,set c){
c[0]=0;
for(int i=1;i<=a[0];i++) if(!apartenenta(a[i],b)) {
c[0]++;
c[c[0]]=a[i];
}
}
int main(){
fin>>n;
int i,j,k,r,m,a[1025];
set t;
for(i=1;i<=n;i++)
u[i]=g[i]=i;
u[0]=g[0]=n;
fin>>m;
for(i=1;i<=m;i++){
fin>>k;
for(j=1;j<=n;j++) st[j]=dr[j]=0;
for(j=1;j<=2*k;j++) fin>>a[j];
fin>>r;
for(j=1;j<=k;j++) st[a[j]]=1;
for(j=k+1;j<=k*2;j++) dr[a[j]]=1;
if(r==0) {
dif(u,st,t);
copy(u,t);
dif(u,dr,t);
copy(u,t);
dif(g,st,t);
copy(g,t);
dif(g,dr,t);
copy(g,t);
}
else
if(r==1){
intersectie(g,st,t);
copy(g,t);
intersectie(u,dr,t);
copy(u,t);
}
else {
intersectie(u,st,t);
copy(u,t);
intersectie(g,dr,t);
copy(g,t);
}
}
if(u[0]==1&&g[0]==0) fout<<u[1];
else if(g[0]==1&&u[0]==0) fout<<g[1];
else fout<<0;
return 0;
}