#pragma GCC optimize ("Ofast") #include using namespace std; inline int my_getchar_unlocked(){ static char buf[1048576]; static int s = 1048576; static int e = 1048576; if(s == e && e == 1048576){ e = fread_unlocked(buf, 1, 1048576, stdin); s = 0; } if(s == e){ return EOF; } return buf[s++]; } inline void rd(int &x){ int k; int m=0; x=0; for(;;){ k = my_getchar_unlocked(); if(k=='-'){ m=1; break; } if('0'<=k&&k<='9'){ x=k-'0'; break; } } for(;;){ k = my_getchar_unlocked(); if(k<'0'||k>'9'){ break; } x=x*10+k-'0'; } if(m){ x=-x; } } struct MY_WRITER{ char buf[1048576]; int s; int e; MY_WRITER(){ s = 0; e = 1048576; } ~MY_WRITER(){ if(s){ fwrite_unlocked(buf, 1, s, stdout); } } } ; MY_WRITER MY_WRITER_VAR; void my_putchar_unlocked(int a){ if(MY_WRITER_VAR.s == MY_WRITER_VAR.e){ fwrite_unlocked(MY_WRITER_VAR.buf, 1, MY_WRITER_VAR.s, stdout); MY_WRITER_VAR.s = 0; } MY_WRITER_VAR.buf[MY_WRITER_VAR.s++] = a; } inline void wt_L(char a){ my_putchar_unlocked(a); } inline void wt_L(int x){ int s=0; int m=0; char f[10]; if(x<0){ m=1; x=-x; } while(x){ f[s++]=x%10; x/=10; } if(!s){ f[s++]=0; } if(m){ my_putchar_unlocked('-'); } while(s--){ my_putchar_unlocked(f[s]+'0'); } } int N; int M; int A[50]; int B[10000][50]; int Y[10000]; int X[50]; int mat[10000][50]; int x[50]; int y[10000]; int main(){ int b; int i; int j; int k; int r; int c; rd(N); rd(M); for(i=(0);i<(M);i++){ rd(A[i]); { int Q5VJL1cS; for(Q5VJL1cS=(0);Q5VJL1cS<(A[i]);Q5VJL1cS++){ rd(B[i][Q5VJL1cS]);B[i][Q5VJL1cS] += (-1); } } rd(Y[i]); } for(b=(0);b<(30);b++){ for(i=(0);i<(M);i++){ for(j=(0);j<(A[i]);j++){ mat[i][B[i][j]] = 1; } } for(i=(0);i<(M);i++){ if(((Y[i]) &(1<<(b)))){ y[i] =1; } else{ y[i] =0; } } r = 0; for(c=(0);c<(N);c++){ if(r >= M){ break; } for(k=(r);k<(M);k++){ if(mat[k][c]){ break; } } if(k == M){ continue; } if(k != r){ for(i=(0);i<(N);i++){ swap(mat[r][i], mat[k][i]); } swap(y[r], y[k]); } for(k=(r+1);k<(M);k++){ if(mat[k][c]){ for(i=(0);i<(N);i++){ mat[k][i] ^= mat[r][i]; } y[k] ^= y[r]; } } r++; } for(i=(0);i<(N);i++){ x[i] = 0; } for(r=(M)-1;r>=(0);r--){ for(i=(0);i<(N);i++){ if(mat[r][i]){ break; } } if(i==N && y[r]){ wt_L(-1); wt_L('\n'); return 0; } if(i==N){ continue; } x[i] = y[r]; for(j=(i+1);j<(N);j++){ x[i] ^= (mat[r][j] * x[j]); } } for(i=(0);i<(N);i++){ X[i] |= (x[i] << b); } } { int X9Iss0pP; for(X9Iss0pP=(0);X9Iss0pP<(N);X9Iss0pP++){ wt_L(X[X9Iss0pP]); wt_L('\n'); } } return 0; } // cLay version 20210227-1 // --- original code --- // int N, M, A[50], B[1d4][50], Y[1d4], X[50]; // int mat[1d4][50], x[50], y[1d4]; // { // int i, j, k, r, c; // rd(N,M); // rep(i,M) rd(A[i], (B[i]--)(A[i]), Y[i]); // rep(b,30){ // rep(i,M) rep(j,A[i]) mat[i][B[i][j]] = 1; // rep(i,M) y[i] = if[BIT_ith(Y[i], b), 1, 0]; // r = 0; // // wt("---"); // // rep(i,M) wt(mat[i](N), ":", y[i]); // rep(c,N){ // if(r >= M) break; // rep(k,r,M) if(mat[k][c]) break; // if(k == M) continue; // if(k != r){ // rep(i,N) swap(mat[r][i], mat[k][i]); // swap(y[r], y[k]); // } // rep(k,r+1,M) if(mat[k][c]){ // rep(i,N) mat[k][i] ^= mat[r][i]; // y[k] ^= y[r]; // } // r++; // } // // wt("+++"); // // rep(i,M) wt(mat[i](N), ":", y[i]); // // rep(i,N) x[i] = 0; // rrep(r,M){ // rep(i,N) if(mat[r][i]) break; // if(i==N && y[r]) wt(-1), return 0; // if(i==N) continue; // x[i] = y[r]; // rep(j,i+1,N) x[i] ^= (mat[r][j] * x[j]); // } // rep(i,N) X[i] |= (x[i] << b); // } // wtLn(X(N)); // }