#include #include char bit (int n, int b) { n = n / (1 << b); n = n%2; return (n > 0); } int main (void) { int K, k, M, m, N, n; int T, t, B, b; int c[21]; char s[1001]; FILE *in = fopen ("problems.in", "r"); fscanf (in, "%d\n", &K); for (k = 1; k <= K; k ++) { printf ("Data Set %d: ", k); fscanf (in, "%d %d\n", &M, &N); for (n = 0; n < N; n ++) { int i; char *ts; c[n] = 0; fgets (s, 1001, in); s[strlen(s)-1] = 0; for (i = 0, ts = strtok(s, " \n"); ts != NULL; i ++, ts = strtok(NULL, " \n")) { sscanf (ts, "%d", &m); m --; c[n] = c[n] | (1 << m); } } T = 0; B = M+1; for (t = 0; t < (1 << N); t ++) { int cc = 0; b = 0; for (n = 0; n < N; n ++) if (bit(t, N-1-n)) { b ++; cc = cc | c[n]; } if (cc == (1 << M) -1 && b <= B) { T = t; B = b; } } b = 1; for (n = 0; n < N; n ++) if (bit(T, N-1-n)) { printf ("%c", 'A' + n); if (b < B) printf (" "); b ++; } if (k < K) printf ("\n"); } fclose (in); return 0; }