#include #include #include using namespace std; map, char> flag_to_letter = { {{0,1}, 'a'}, {{0,2}, 'b'}, {{0,3}, 'c'}, {{0,4}, 'd'}, {{0,5}, 'e'}, {{0,6}, 'f'}, {{0,7}, 'g'}, {{1,2}, 'h'}, {{1,3}, 'i'}, {{4,6}, 'j'}, {{1,4}, 'k'}, {{1,5}, 'l'}, {{1,6}, 'm'}, {{1,7}, 'n'}, {{2,3}, 'o'}, {{2,4}, 'p'}, {{2,5}, 'q'}, {{2,6}, 'r'}, {{2,7}, 's'}, {{3,4}, 't'}, {{3,5}, 'u'}, {{4,7}, 'v'}, {{5,6}, 'w'}, {{5,7}, 'x'}, {{3,6}, 'y'}, {{6,7}, 'z'}, }; map directions = { {0, ".........\n" ".........\n" ".........\n" ".........\n" "....*....\n" "....#....\n" "....#....\n" "....#....\n" ".........\n"}, {1, ".........\n" ".........\n" ".........\n" ".........\n" "....*....\n" "...#.....\n" "..#......\n" ".#.......\n" ".........\n"}, {2, ".........\n" ".........\n" ".........\n" ".........\n" ".###*....\n" ".........\n" ".........\n" ".........\n" ".........\n"}, {3, ".........\n" ".#.......\n" "..#......\n" "...#.....\n" "....*....\n" ".........\n" ".........\n" ".........\n" ".........\n"}, {4, ".........\n" "....#....\n" "....#....\n" "....#....\n" "....*....\n" ".........\n" ".........\n" ".........\n" ".........\n"}, {5, ".........\n" ".......#.\n" "......#..\n" ".....#...\n" "....*....\n" ".........\n" ".........\n" ".........\n" ".........\n"}, {6, ".........\n" ".........\n" ".........\n" ".........\n" "....*###.\n" ".........\n" ".........\n" ".........\n" ".........\n"}, {7, ".........\n" ".........\n" ".........\n" ".........\n" "....*....\n" ".....#...\n" "......#..\n" ".......#.\n" ".........\n"}, }; int main() { int n, c; cin >> n >> c; map> reverseFlags; for(auto& item : flag_to_letter){ reverseFlags.insert({item.second, item.first}); } cin.ignore(999,'\n'); string word; for (int i = 0; i < n; ++i) { vector flags; char dummy; cin.ignore(30); cin.ignore(3); // TOP 3 for(int j = 0; j < 3; ++j) { dummy = cin.get(); if(dummy == '#') flags.push_back(j + 3); } cin.ignore(4); cin.ignore(3); // LEFT dummy = cin.get(); if(dummy == '#') flags.push_back(2); cin.ignore(1); //RIGHT dummy = cin.get(); if(dummy == '#') flags.push_back(6); cin.ignore(4); cin.ignore(3); // BOTTOM 3 for(int j = 0; j < 3; ++j) { dummy = cin.get(); if(dummy == '#') switch(j) { case 0: flags.push_back(1); break; case 1: flags.push_back(0); break; case 2: flags.push_back(7); break; } } cin.ignore(4); cin.ignore(30); std::sort(flags.begin(), flags.end()); word.push_back(flag_to_letter[{flags[0],flags[1]}]); } for(char & i : word) { int x = i + c; if( x > (int)'z'){ i = (i + c - 'z' + 'a' - 1); } else{ i = i + c; } } for(char & i : word) { pair flags = reverseFlags[i]; string f1 = directions[flags.first], f2 = directions[flags.second]; for(size_t i = 0; i < f1.size(); ++i) { if(f1[i] == '#' || f2[i] == '#') cout << '#'; else cout << f1[i]; } } return 0; }