#include using namespace std; using ll = long long; ll decode(const vector & map) { if (map.size() == 1) return 1; ll result = 1; for (ll i = 1; i < map.size(); ++i) { ll diff = map[i] - map[i-1]; if (diff == 1) { result = result * 2; } else { result = result * 2 + 1; } } return result; } vector encode(ll num) { vector result; result.push_back(0); while (num > 1) { if (num % 2 == 0) { result.push_back(result[result.size() - 1]+1); } else { result.push_back(result[result.size() - 1]-1); } num /= 2; } ll min = LLONG_MAX; ll max = LLONG_MIN; std::reverse(result.begin(), result.end()); for (ll x : result) { min = std::min(min, x); } for (ll & x : result) { x -= min; } for (ll x : result) { max = std::max(max, x); } for (ll & x : result) { x = max - x; } return result; } vector getNumber() { ll count; cin >> count; vector result; for (ll i = 0; i < count; ++i) { string line; cin >> line; for (ll j = 0; j < line.size(); ++j) { if (line[j] == '#') { result.push_back(j); break; } } } return result; } void printResult(const vector & input) { ll max = LLONG_MIN; for (ll x : input) { max = std::max(max, x); } cout << input.size() << '\n'; for (const auto & x : input) { string line(max + 1, '.'); line[x] = '#'; cout << line << '\n'; } } int main() { vector first = getNumber(); vector second = getNumber(); vector result = encode(decode(first)+decode(second)); printResult(result); return 0; }