import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
class MirrorEncryption {
public static char followPath(char[][] field, char c) {
if ('a' <= c && c <= 'm') {
return followPath(field, c - 'a', -1, 0, 1);
}
if ('n' <= c && c <= 'z') {
return followPath(field, 13, c - 'n', -1, 0);
}
if ('A' <= c && c <= 'M') {
return followPath(field, -1, c - 'A', 1, 0);
}
if ('N' <= c && c <= 'Z') {
return followPath(field, c - 'N', 13, 0, -1);
}
}
public static char followPath(char[][] field, int x, int y, int dx, int dy) {
if (y + dy <= -1) {
return (char) ('a' + x + dx);
} else if (x + dx >= 13) {
return (char) ('n' + y + dy);
} else if (x + dx <= -1) {
return (char) ('A' + y + dy);
} else if (y + dy >= 13) {
return (char) ('N' + x + dx);
} else {
switch (field[x + dx][y + dy]) {
case ' ':
return followPath(field, x + dx, y + dy, dx, dy);
case '\\':
return followPath(field, x + dx, y + dy, dy, dx);
case '/':
return followPath(field, x + dx, y + dy, -dy, -dx);
default:
}
}
}
public static void main
(String[] args
) { Scanner scanner
= new Scanner
(System.
in); char[][] field = new char[13][13];
for (int y = 0; y < 13; y++) {
String line
= scanner.
nextLine(); for (int x = 0; x < 13; x++) {
field[x][y] = line.charAt(x);
}
}
String word
= scanner.
nextLine(); Map
<Character,Character
> encryption
= new HashMap
<>(); for (int i = 0; i < 26; i++) {
encryption.put((char) ('a' + i), followPath(field, (char) ('a' + i)));
encryption.put((char) ('A' + i), followPath(field, (char) ('A' + i)));
}
for (char c : word.toCharArray()) {
System.
out.
print(encryption.
get(c
)); }
}
}
aW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwppbXBvcnQgamF2YS51dGlsLk1hcDsKaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwpjbGFzcyBNaXJyb3JFbmNyeXB0aW9uIHsKICAgIHB1YmxpYyBzdGF0aWMgY2hhciBmb2xsb3dQYXRoKGNoYXJbXVtdIGZpZWxkLCBjaGFyIGMpIHsKICAgICAgICBpZiAoJ2EnIDw9IGMgJiYgYyA8PSAnbScpIHsKICAgICAgICAgICAgcmV0dXJuIGZvbGxvd1BhdGgoZmllbGQsIGMgLSAnYScsIC0xLCAwLCAxKTsKICAgICAgICB9CiAgICAgICAgaWYgKCduJyA8PSBjICYmIGMgPD0gJ3onKSB7CiAgICAgICAgICAgIHJldHVybiBmb2xsb3dQYXRoKGZpZWxkLCAxMywgYyAtICduJywgLTEsIDApOwogICAgICAgIH0KICAgICAgICBpZiAoJ0EnIDw9IGMgJiYgYyA8PSAnTScpIHsKICAgICAgICAgICAgcmV0dXJuIGZvbGxvd1BhdGgoZmllbGQsIC0xLCBjIC0gJ0EnLCAxLCAwKTsKICAgICAgICB9CiAgICAgICAgaWYgKCdOJyA8PSBjICYmIGMgPD0gJ1onKSB7CiAgICAgICAgICAgIHJldHVybiBmb2xsb3dQYXRoKGZpZWxkLCBjIC0gJ04nLCAxMywgMCwgLTEpOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGNoYXJhY3RlciBpbiB3b3JkLiIpOwogICAgfQogICAgcHVibGljIHN0YXRpYyBjaGFyIGZvbGxvd1BhdGgoY2hhcltdW10gZmllbGQsIGludCB4LCBpbnQgeSwgaW50IGR4LCBpbnQgZHkpIHsKICAgICAgICBpZiAoeSArIGR5IDw9IC0xKSB7CiAgICAgICAgICAgIHJldHVybiAoY2hhcikgKCdhJyArIHggKyBkeCk7CiAgICAgICAgfSBlbHNlIGlmICh4ICsgZHggPj0gMTMpIHsKICAgICAgICAgICAgcmV0dXJuIChjaGFyKSAoJ24nICsgeSArIGR5KTsKICAgICAgICB9IGVsc2UgaWYgKHggKyBkeCA8PSAtMSkgewogICAgICAgICAgICByZXR1cm4gKGNoYXIpICgnQScgKyB5ICsgZHkpOwogICAgICAgIH0gZWxzZSBpZiAoeSArIGR5ID49IDEzKSB7CiAgICAgICAgICAgIHJldHVybiAoY2hhcikgKCdOJyArIHggKyBkeCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3dpdGNoIChmaWVsZFt4ICsgZHhdW3kgKyBkeV0pIHsKICAgICAgICAgICAgICAgIGNhc2UgJyAnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBmb2xsb3dQYXRoKGZpZWxkLCB4ICsgZHgsIHkgKyBkeSwgZHgsIGR5KTsKICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9sbG93UGF0aChmaWVsZCwgeCArIGR4LCB5ICsgZHksIGR5LCBkeCk7CiAgICAgICAgICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9sbG93UGF0aChmaWVsZCwgeCArIGR4LCB5ICsgZHksIC1keSwgLWR4KTsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBjaGFyYWN0ZXIgaW4gZmllbGQuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgU2Nhbm5lciBzY2FubmVyID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKICAgICAgICBjaGFyW11bXSBmaWVsZCA9IG5ldyBjaGFyWzEzXVsxM107CiAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCAxMzsgeSsrKSB7CiAgICAgICAgICAgIFN0cmluZyBsaW5lID0gc2Nhbm5lci5uZXh0TGluZSgpOwogICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDEzOyB4KyspIHsKICAgICAgICAgICAgICAgIGZpZWxkW3hdW3ldID0gbGluZS5jaGFyQXQoeCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgU3RyaW5nIHdvcmQgPSBzY2FubmVyLm5leHRMaW5lKCk7CiAgICAgICAgTWFwPENoYXJhY3RlcixDaGFyYWN0ZXI+IGVuY3J5cHRpb24gPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNjsgaSsrKSB7CiAgICAgICAgICAgIGVuY3J5cHRpb24ucHV0KChjaGFyKSAoJ2EnICsgaSksIGZvbGxvd1BhdGgoZmllbGQsIChjaGFyKSAoJ2EnICsgaSkpKTsKICAgICAgICAgICAgZW5jcnlwdGlvbi5wdXQoKGNoYXIpICgnQScgKyBpKSwgZm9sbG93UGF0aChmaWVsZCwgKGNoYXIpICgnQScgKyBpKSkpOwogICAgICAgIH0KICAgICAgICBmb3IgKGNoYXIgYyA6IHdvcmQudG9DaGFyQXJyYXkoKSkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGVuY3J5cHRpb24uZ2V0KGMpKTsKICAgICAgICB9CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICB9Cn0=