#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include using namespace std; const char* INPUT_FILE_NAME = "bits.in"; const char* OUTPUY_FILE_NAME = "bits.out"; int n, m, k; char strings[64][64]; bool data[64 * 64]; bool bits[64]; void readInput() { FILE* finp = fopen(INPUT_FILE_NAME, "r"); fscanf(finp, "%d%d", &n, &k); for (int i = 0; i < n; ++i) fscanf(finp, "%s%d", &strings[i], &bits[i]); fclose(finp); m = strlen(strings[0]); for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) data[i * m + j] = !!(strings[i][j] - '0'); } void writeInput() { printf("%d %d %d\n", n, m, k); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) printf("%d", data[i * m + j]); printf(" %d\n", bits[i]); } } int elementsCount; char comb[16]; void printComb() { printf("Comb:\n"); for (int i = 0; i < elementsCount; ++i) printf("%d ", comb[i]); printf("\n"); } void writeOutput() { FILE* fout = fopen(OUTPUY_FILE_NAME, "w"); fprintf(fout, "%d\n", elementsCount); for (int i = 0; i < elementsCount; ++i) fprintf(fout, "%d\n", comb[i]); fclose(fout); } void checkComb() { for (int i = 0; i < n; ++i) { bool result = data[i * m + comb[0]]; for (int j = 1; j < elementsCount; ++j) { result ^= data[i * m + comb[j]]; } if (result != bits[i]) return; } writeOutput(); cout << (double)clock() / CLOCKS_PER_SEC << endl; exit(0); } void genComb(int i, int j) { if (i >= elementsCount) return; for (int l = j; l < m; ++l) { comb[i] = l; if (i == elementsCount - 1) { //printComb(); checkComb(); } genComb(i + 1, l + 1); } } void solve() { for (int i = 1; i <= k; ++i) { elementsCount = i; genComb(0, 0); } } int main() { readInput(); //writeInput(); solve(); writeOutput(); FILE* fout = fopen(OUTPUY_FILE_NAME, "w"); fprintf(fout, "-1\n"); fclose(fout); return 0; }