#include #include char cube[30][30][30]; char word[120][30]; int n, m; int ext(char s[], int x, int y, int z, int dx, int dy, int dz) { int i = x, j = y, k = z, l; int len; len = strlen(s); for (l = 0; l < len; l++) { if (x+dx*l < 0 || y+dy*l < 0 || z+dz*l < 0 || x+dx*l > m-1 || y+dy*l > m-1 || z+dz*l > m-1) { return 0; } if (cube[x+dx*l][y+dy*l][z+dz*l] != s[l]) { return 0; } } return 1; } int find(char s[]) { int len = strlen(s); int i, j, k; int dx, dy, dz; for (i = 0; i < m; i++) { for (j = 0; j < m; j++) { for (k = 0; k < m; k++) { if (s[0] == cube[i][j][k]) { for (dx = -1; dx <= 1; dx++) { for (dy = -1; dy <= 1; dy++) { for (dz = -1; dz <= 1; dz++) { if (ext(s, i, j, k, dx, dy, dz)) { if (i+dx*(-1) < 0 || j+dy*(-1) < 0 || k+dz*(-1) < 0 || i+dx*(-1) >m-1 ||j+dy*(-1) >m-1 || k+dz*(-1) > m-1) { printf("%c", cube[i+dx*len ][j+dy*len ][k+dz*len ]); } else { printf("%c", cube[i+dx*(-1)][j+dy*(-1)][k+dz*(-1)]); } } } } } } } } } } int main() { char s[1024], *p; int i, j, k; freopen("prince.in", "r", stdin); gets(s); sscanf(s, "%d,%d", &n, &m); for (i = 0; i < n; i++) { gets(word[i]); } for (i = 0; i < m; i++) { gets(s); p = strtok(s, ","); for (j = 0; j < m; j++) { strcpy(cube[i][j], p); p = strtok(NULL, ","); } } for (i = 0; i < n; i++) { find(word[i]); } printf("\n"); return 0; }