#include using namespace std; using ll = size_t; using lll = long long; size_t findI(string& l){ for (ll i = 0; i < l.size(); i++){ if (l[i] == '#'){ return i; } } } ll getNum(ll N){ string line; getline(cin, line); ll i = findI(line); ll sum = 1; for (ll l = 1; l < N; l++) { getline(cin, line); sum *= 2; if (i - 1 >= 0 && line[i - 1] == '#'){ sum++; i--; } else{ i++; } } return sum; } int main() { std::ios::sync_with_stdio(false); ll N; cin >> N; string line; getline(cin, line); ll num1 = getNum(N); ll N2; cin >> N2; getline(cin, line); ll num2 = getNum(N2); ll res = num2 + num1; //cout << "rws: " << res << " " << num1 << " " << num2 << endl; stack rs; ll lines = 1; lll min = 0; lll max = 0; lll cur = 0; rs.push(0); while (res > 1){ ll oe = res & 1; if (oe == 1){ cur++; } else{ cur--; } res = res / 2; if (cur > max){ max = cur; } if (cur < min){ min = cur; } rs.push(cur); lines++; } lll len = max - min + 1; //cout << len << endl; //cout << max << " " << min << endl; string ou; for (ll o = 0; o < len; o++){ ou.push_back('.'); } cout << lines << endl; while(!rs.empty()){ lll pos = rs.top(); ou[pos - min] = '#'; cout << ou << endl; ou[pos - min] = '.'; rs.pop(); } return 0; }