#include #include #include int calculate_number(std::vector poses, int len){ int res = 1; for(int i = 0; i < len - 1; i++){ if(poses[i] < poses[i+1]){ res = (res << 1) ; }else{ res = (res << 1) + 1; } //std::cout << res << '\n'; } return res; } int main(){ int n1 = 0, n2 = 0; std::cin >> n1; std::string el; std::vector pos1, pos2; for(int i = 0; i < n1 ; i++){ std::cin >> el; pos1.push_back(el.find("#")); } // for(int i = 0; i < n1 ; i++){ // std::cout << pos1[i] << "da3123123dasd\n"; // } std::cin >> n2; for(int i = 0; i < n2 ; i++){ std::cin >> el; pos2.push_back(el.find("#")); } // for(int i = 0; i < n2 ; i++){ // std::cout << pos2[i] << "dadasd\n"; // } int max_left = 0; int current_left = 0; int max_right = 0; int current_right = 0; int num1 = calculate_number(pos1, n1); int num2 = calculate_number(pos2, n2); int sum = num1+num2; int sum_tmp = sum; int num_rows_result = int(log2(sum)) + 1; std::cout << num_rows_result << '\n'; for(int i = 0; i < num_rows_result - 1; i++){ if(sum % 2 == 1){ sum = int((sum - 1) / 2); current_left += 1; current_right -= 1; max_left = std::max(current_left, max_left); }else{ sum = int(sum / 2); current_left -= 1; current_right += 1; max_right = std::max(current_right, max_right); } } sum = sum_tmp; //std::cout << sum << ' ' << num_rows_result << ' ' << max_right << ' ' << max_left << '\n'; int num_cols = max_right + max_left + 1; int current_pos = max_left; for(int i = 0; i < num_rows_result; i++){ for(int j = 0; j < num_cols; j++){ if(j == current_pos){ std::cout << '#'; }else{ std::cout << '.'; } } if(sum % 2 == 1){ current_pos-=1; sum = int((sum - 1) / 2); }else{ current_pos+=1; sum = int(sum / 2); } std::cout <<'\n'; } //std::cout << res1 << '\n'; return 0; }