#include using namespace std; #define FLAG_SIZE 9 enum struct Direction { DOWN, LEFT_DOWN, LEFT, LEFT_TOP, TOP, TOP_RIGHT, RIGHT, DOWN_RIGHT, }; using enum Direction; const std::vector> Characters = { {DOWN, LEFT_DOWN}, {DOWN, LEFT}, {DOWN, LEFT_TOP}, {DOWN, TOP}, {DOWN, TOP_RIGHT}, {DOWN, RIGHT}, {DOWN, DOWN_RIGHT}, {LEFT_DOWN, LEFT}, {LEFT_DOWN, LEFT_TOP}, {TOP, RIGHT}, {LEFT_DOWN, TOP}, {LEFT_DOWN, TOP_RIGHT}, {LEFT_DOWN, RIGHT}, {LEFT_DOWN, DOWN_RIGHT}, {LEFT, LEFT_TOP}, {LEFT, TOP}, {LEFT, TOP_RIGHT}, {LEFT, RIGHT}, {LEFT, DOWN_RIGHT}, {LEFT_TOP, TOP}, {LEFT_TOP, TOP_RIGHT}, {TOP, DOWN_RIGHT}, {TOP_RIGHT, RIGHT}, {TOP_RIGHT, DOWN_RIGHT}, {LEFT_TOP, RIGHT}, {RIGHT, DOWN_RIGHT}, }; map baseSymbols{ {DOWN, ".........\n" ".........\n" ".........\n" ".........\n" "....*....\n" "....#....\n" "....#....\n" "....#....\n" ".........\n"}, {LEFT_DOWN, ".........\n" ".........\n" ".........\n" ".........\n" "....*....\n" "...#.....\n" "..#......\n" ".#.......\n" ".........\n"}, {LEFT, ".........\n" ".........\n" ".........\n" ".........\n" ".###*....\n" ".........\n" ".........\n" ".........\n" ".........\n"}, {LEFT_TOP, ".........\n" ".#.......\n" "..#......\n" "...#.....\n" "....*....\n" ".........\n" ".........\n" ".........\n" ".........\n"}, {TOP, ".........\n" "....#....\n" "....#....\n" "....#....\n" "....*....\n" ".........\n" ".........\n" ".........\n" ".........\n"}, {TOP_RIGHT, ".........\n" ".......#.\n" "......#..\n" ".....#...\n" "....*....\n" ".........\n" ".........\n" ".........\n" ".........\n"}, {RIGHT, ".........\n" ".........\n" ".........\n" ".........\n" "....*###.\n" ".........\n" ".........\n" ".........\n" ".........\n"}, {DOWN_RIGHT, ".........\n" ".........\n" ".........\n" ".........\n" "....*....\n" ".....#...\n" "......#..\n" ".......#.\n" ".........\n"} }; set readFlag() { char c; std::vector result; int mid = FLAG_SIZE / 2; for (int i = 0; i < FLAG_SIZE; ++i) { for (int j = 0; j < FLAG_SIZE; ++j) { cin >> c; if (c == '#') { if (i == mid - 1 && j == mid - 1) { result.push_back(LEFT_TOP); } if (i == mid - 1 && j == mid) { result.push_back(TOP); } if (i == mid - 1 && j == mid + 1) { result.push_back(TOP_RIGHT); } if (i == mid && j == mid + 1) { result.push_back(RIGHT); } if (i == mid + 1 && j == mid + 1) { result.push_back(DOWN_RIGHT); } if (i == mid + 1 && j == mid) { result.push_back(DOWN); } if (i == mid + 1 && j == mid - 1) { result.push_back(LEFT_DOWN); } if (i == mid && j == mid - 1) { result.push_back(LEFT); } } } } return {result[0], result[1]}; } int findSymbol(set symbol) { for (int i = 0; i < Characters.size(); ++i) { if (symbol == Characters[i]) return i; } } void printSymbol(set symbol) { vector vec(symbol.begin(), symbol.end()); auto flag1 = baseSymbols[vec[0]]; auto flag2 = baseSymbols[vec[1]]; for (int i = 0; i < flag1.size(); ++i) { if (flag1[i] != flag2[i]) { cout << '#'; } else { cout << flag1[i]; } } } int main() { int N, C; cin >> N >> C; for (int i = 0; i < N; ++i) { auto symbol = readFlag(); int decoded = findSymbol(symbol); decoded += C; decoded %= 26; printSymbol(Characters[decoded]); } return 0; }