#include #include #include int load_num() { int num1_lines; std::cin >> num1_lines >> std::ws; std::string curr_line; std::getline(std::cin, curr_line); // size_t row_size = curr_line.size(); size_t start_idx = curr_line.find('#'); int curr = 1; while (--num1_lines) { std::getline(std::cin, curr_line); size_t curr_idx = curr_line.find('#'); if (curr_idx < start_idx) { curr = 2*curr + 1; } else { curr *= 2; } start_idx = curr_idx; } return curr; } void print_map(int sum) { int idx = 0; int min = 0; int max = 0; std::vector indexy; indexy.push_back(0); for (int curr = sum; curr != 1; curr /= 2) { if (curr % 2 == 0) { --idx; if (idx < min) min = idx; } else { ++idx; if (idx > max) max = idx; } indexy.push_back(idx); } std::cout << indexy.size() << std::endl; std::reverse(indexy.begin(), indexy.end()); for (auto index : indexy) { int nth = index - min; for (int ii = 0; ii < nth; ii += 1) { std::cout << '.'; } std::cout << '#'; for (int ii = nth + 1; ii <= max - min; ii += 1) { std::cout << '.'; } std::cout << std::endl; } } int main() { int sum = load_num(); sum += load_num(); print_map(sum); return 0; }