#include #include size_t parse_num() { size_t rows = 0; std::cin >> rows; size_t previous = 0; size_t num = 1; getchar(); for (size_t row = 0; row < rows; row++) { size_t counter = 0; while (true) { char c = getchar(); if (c == '#') { if (row == 0) {} else if (counter < previous) { num = num * 2 + 1; } else { num *= 2; } previous = counter; } else if (c == '.') { counter += 1; } if (isspace(c) || c == EOF) break; } } return num; } void print_line(size_t pos, size_t width) { for (size_t i = 0; i < width; i++) { if (pos == i) std::cout << '#'; else std::cout << '.'; } std::cout << std::endl; } void print_num(size_t number) { long min, max, current = 0; min = 0; max = 0; std::vector moves; while (number != 1) { if (number % 2 == 0) { current--; min = std::min(current, min); moves.push_back('r'); } else { current++; max = std::max(current, max); moves.push_back('l'); } number /= 2; } long width = max - min + 1; current = current - min; std::cout << moves.size() + 1 << std::endl; print_line(current, width); for (auto iter = moves.rbegin(); iter != moves.rend(); ++iter) { if (*iter == 'r') { current += 1; } else { current -= 1; } print_line(current, width); } } int main() { size_t num = parse_num(); size_t num2 = parse_num(); print_num(num + num2); }