#include #include #include int main (void) { int k, K; char s[1000]; char *s1, *s2; int n, w; char *ts; int i,j,m,i1,i2,d,w1,w2,pj,r; char cf[201][201], e[102][201][201]; char ep1[102],ep2[102], ep3[102], ep4[102]; char answer; char *q[201]; FILE *in = fopen ("essays.in", "r"); fscanf (in, "%d\n", &K); for (k = 1; k <= K; k ++) { fgets (s, 999, in); s[strlen(s)-1] = 0; sscanf (strtok(s, " "), "%d", &n); sscanf (strtok(NULL, " "), "%d", &w); s1 = strdup (strtok(NULL, " ")); s2 = strdup (strtok(NULL, " ")); m = 0; pj = -1; for (i = 0; i < 201; i ++) for (j = 0; j < 201; j ++) cf[i][j] = 0; for (r = 1; r <= n; r ++) { fgets (s, 999, in); s[strlen(s)-1] = 0; for (ts = strtok(s, " "); ts != NULL; ts = strtok (NULL, " ")) { j = m; for (i = 0; i < m; i ++) if (strcmp (q[i], ts) == 0) j = i; if (j == m) { q[m] = strdup (ts); m ++; } if (pj >= 0) cf[pj][j] = 1; pj = j; } } for (i = 0; i < m; i ++) for (j = 0; j < m; j ++) e[1][i][j] = cf[i][j]; for (i = 0; i < m; i ++) e[0][i][i] = 1; for (d = 2; d <= w; d ++) for (i = 0; i < m; i ++) for (j = 0; j < m; j ++) { e[d][i][j] = 0; for (r = 0; r < m; r ++) if (cf[r][j] && e[d-1][i][r]) e[d][i][j] = 1; } answer = 0; i1 = i2 = -1; for (i = 0; i < m; i ++) if (strcmp(q[i], s1) == 0) i1 = i; for (i = 0; i < m; i ++) if (strcmp(q[i], s2) == 0) i2 = i; if (i1 >= 0 && i2 >= 0) { for (w1 = 1; w1 <= w; w1 ++) ep1[w1] = ep2[w1] = ep3[w1] = ep4[w1] = 0; ep1[0] = ep2[0] = ep3[0] = ep4[0] = 1; for (i = 0; i < m; i ++) for (w1 = 1; w1 <= w; w1 ++) { if (e[w1][i][i1]) ep1[w1] = 1; if (e[w1][i2][i]) ep2[w1] = 1; if (e[w1][i][i2]) ep3[w1] = 1; if (e[w1][i1][i]) ep4[w1] = 1; } for (w1 = 0; w1 < w; w1 ++) for (w2 = 0; w2 < w-w1; w2 ++) if ((ep1[w1] && ep2[w2] && e[w-w1-w2-1][i1][i2]) || (ep3[w1] && ep4[w2] && e[w-w1-w2-1][i2][i1])) answer = 1; } printf ("Data Set %d:\n", k); if (answer) printf ("Yes\n"); else printf ("No\n"); } fclose (in); return 0; }