#include using namespace std; #define int long long int dec(int n, const string A[]) { int LEN = A[1].size(); int decA = (1LL << (n - 1)); int lstPos = -1; for (int i = n; i >= 1; i--) { if (i == n) { for (int j = 0; j < LEN; j++) { char ch = A[i][j]; if (ch == '#') { lstPos = j; break; } } continue; } for (int j = 0; j < LEN; j++) { char ch = A[i][j]; if (ch == '#') { if (j == lstPos - 1) { } else { decA += (1LL << (n - i - 1)); // cout << i << " " << j << " <<< " << n << " : " << (1LL << (n - i)) << endl; } lstPos = j; break; } } } // cout << "SO NOW GOT " << decA << endl; // cout << endl; return decA; } void enc(int num) { int INITnum = num; int depth = 1; int pos = 0; int mnLft = 0, mxRght = 0; while (num > 1) { if (num % 2 == 0) pos--; else pos++; num /= 2; mnLft = min(mnLft, pos); mxRght = max(mxRght, pos); depth++; } num = INITnum; pos = -mnLft; int rng = mxRght - mnLft + 1; string ans[depth + 1]; for (int i = 1; i <= depth; i++) { ans[i].resize(rng); for (int j = 0; j < rng; j++) { ans[i][j] = '.'; } if (i >= 2) { if (num % 2 == 0) pos--; else pos++; num /= 2; } ans[i][pos] = '#'; } cout << depth << '\n'; for (int i = depth; i >= 1; i--) { for (int j = 0; j < rng; j++) { cout << ans[i][j]; } cout << '\n'; } } int n; string A[40]; int m; string B[40]; signed main() { cin.tie(0); ios::sync_with_stdio(0); cin >> n; for (int i = 1; i <= n; i++) cin >> A[i]; cin >> m; for (int i = 1; i <= m; i++) cin >> B[i]; int decA = dec(n, A); int decB = dec(m, B); // cout << decA << " " << decB << '\n'; enc(decA + decB); return 0; }