/* ID: mytbk921 LANG: C TASK: lamps */ #include #include static int popcount(unsigned int i) { int s = 0; while (i) { if (i&1) s++; i >>= 1; } return s; } int n,c,on[101],off[101],final[101]; int result[16][100]; int nres; int sorted[16]; int comp(int i, int j) { int k; for (k=1; k<=n; k++) { if (result[i][k] < result[j][k]) return -1; if (result[i][k] > result[j][k]) return 1; } return 0; } int main() { FILE *fin = fopen("lamps.in", "r"); FILE *fout = fopen("lamps.out", "w"); int l; int i,j,k,pc,tmp; fscanf(fin, "%d%d", &n, &c); memset(on, 0, sizeof(on)); memset(off, 0, sizeof(off)); while (1) { fscanf(fin, "%d", &l); if (l!=-1) on[l] = 1; else break; } while (1) { fscanf(fin, "%d", &l); if (l!=-1) { if (on[l]) goto Impossible; off[l] = 1; } else { break; } } fclose(fin); nres = 0; for (i=0; i<16; i++) { pc = popcount(i); if (pc>c || pc%2 != c%2) continue; if (i&1) { for (j=1; j<=n; j++) final[j] = 0; } else { for (j=1; j<=n; j++) final[j] = 1; } if (i&2) { for (j=1; j<=n; j+=2) final[j] = 1-final[j]; } if (i&4) { for (j=2; j<=n; j+=2) final[j] = 1-final[j]; } if (i&8) { for (j=1; j<=n; j+=3) final[j] = 1-final[j]; } for (j=1; j<=n; j++) { if ((on[j]&&!final[j]) || (off[j]&&final[j])) break; } if (j>n) { for (j=1; j<=n; j++) result[nres][j] = final[j]; nres++; } } if (nres==0) goto Impossible; for (i=0; i=0) { tmp = sorted[i]; for (k=i; k>j; k--) sorted[k] = sorted[k-1]; sorted[j] = tmp; break; } } } for (i=0; i