#include #include #include #include using namespace std; long long getNumber(vector& matrix) { int jIndex = 0; for (size_t i = 0; i < matrix[0].size(); i++) { if (matrix[0][i] == '#') { jIndex = i; } } int i = 0; int j = jIndex; long long number = 1; while (i != matrix.size() - 1) { if (j < matrix[i].size() && matrix[i + 1][j + 1] == '#') { number *= 2; j = j + 1; } else { number = number * 2 + 1; j = j - 1; } ++i; } return number; } vector makeNumber(int x, int y) { int number = x + y; vector dir; int minLeft = 0; int minRight = 0; int left = 0; int right = 0; int counter = 1; while (number != 1) { ++counter; if (number % 2 == 0) { ++left; --right; dir.push_back(-1); } else { --left; ++right; dir.push_back(1); } minLeft = max(left, minLeft); minRight = max(right, minRight); number /= 2; } int rowSize = minRight + minLeft + 1; string s = ""; for (size_t i = 0; i < rowSize; i++) { s += "."; } vector retVal(counter, s); int j = minLeft; int k = retVal.size() - 1; retVal[counter - 1][j] = '#'; --k; for (size_t i = 0; i < dir.size(); i++) { j += dir[i]; retVal[k][j] = '#'; --k; } return retVal; } int main() { int a, b; cin >> a; vector first, second; string s; for (size_t i = 0; i < a; i++) { cin >> s; first.push_back(s); } cin >> b; for (size_t i = 0; i < b; i++) { cin >> s; second.push_back(s); } int x = getNumber(first); int y = getNumber(second); auto answer = makeNumber(x, y); cout << answer.size() << endl; for (size_t i = 0; i < answer.size(); i++) { cout << answer[i] << endl; } }