// Checker for problem K // Author: Adam Polak #include #include #include #include const int N = 26; bool ok[N][N]; char solution[50][50]; int main(int argc, char* argv[]) { FILE* in = fopen(argv[1], "r"); FILE* hint = fopen(argv[2], "r"); FILE* out = fopen(argv[3], "r"); int Z; fscanf(in, "%d", &Z); while (Z--) { int n; fscanf(in, "%d", &n); for (int i = 0; i < N; ++i) for (int j = 0; j < N; ++j) ok[i][j] = true; while (n--) { char w[4]; fscanf(in, "%s", w); ok[w[0]-'a'][w[1]-'a'] = false; } char buf[50]; fscanf(hint, "%s", buf); int m = strlen(buf); for (int i = 1; i < m; ++i) fscanf(hint, "%s", buf); for (int i = 0; i < m; ++i) { assert(fgets(buf, 50, out) != NULL); assert(strlen(buf) == m + 1); // +1 for end-of-line for (int j = 0; j < m; ++j) solution[i][j] = buf[j] - 'a'; } for (int i = 0; i < m; ++i) for (int j = 0; j < m - 1; ++j) assert(ok[solution[i][j]][solution[i][j+1]]); for (int i = 0; i < m - 1; ++i) for (int j = 0; j < m; ++j) assert(ok[solution[i][j]][solution[i+1][j]]); } printf("OK\n"); return 0; }