#include #include #include #include #include int main() { int n, m; scanf("%d", &n); char * grid1 = (char*)malloc(n * n); char * grid2 = (char*)malloc(m * m); for (int i = 0; i < n; i++) { scanf("%s", &grid1[i * n]);; } scanf("%d", &m); for (int i = 0; i < m; i++) { scanf("%s", &grid2[i * m]);; } /* for (int i = 0; i < m * m; i++) { printf("%c\n", grid2[i]); } */ // compute first digit int start1; for (int i = 0; i < n; i++) { if (grid1[i] == '#') { start1 = i; } } int value1 = 1; for (int i = 1; i < n; i++) { if (start1 >= 0) { // check left if (grid1[n * i + start1 - 1] == '#') { value1 = value1 * 2 + 1; start1 -= 1; } else { value1 = value1 * 2; start1 += 1; } } else { value1 = value1 * 2; start1 += 1; } } // printf("calculated value: %d\n", value1); int start2; for (int i = 0; i < m; i++) { if (grid2[i] == '#') { start2 = i; } } // std::cout << "start se nasel na pozici " << start2 << "\n"; int value2 = 1; for (int i = 1; i < m; i++) { if (start2 >= 0) { // check left if (grid2[m * i + start2 - 1] == '#') { value2 = value2 * 2 + 1; start2 -= 1; // std::cout << "doleva\n"; } else { value2 = value2 * 2; start2 += 1; // std::cout << "doprava\n"; } } else { value2 = value2 * 2; start2 += 1; // std::cout << "doprava\n"; } } // printf("calculated value: %d\n", value2); int sum = value1 + value2; int leftB = 0; int rightB = 0; int cur = 0; int depth = 1; std::vector vec; while (sum != 1) { // printf("sum: %d\n", sum); vec.push_back(cur); if (sum % 2 == 0) { cur -= 1; if (cur < leftB) { leftB = cur; } } else { cur += 1; if (cur > rightB) rightB = cur; } sum /= 2; depth++; } int width = rightB - leftB + 1; // printf("leftB = %d, rightB = %d\n", leftB, rightB); printf("%d\n", depth); char * outGrid = (char*)calloc(width * depth, 1); for (int i = 0; i < vec.size(); i++) { // printf("ok\n"); vec[i] = vec[i] - leftB; // printf("%d\n", vec[i]); } for (int i = depth - 1; i >= 0; i--) { outGrid[(depth - 1 - i) * width + vec[i]] = '#'; } for (int i = 0; i < depth; i++) { for (int j = 0; j < width; j++) { if (outGrid[i * width + j] == '#') { printf("#"); } else { printf("."); } // printf("%c", outGrid[i * width + j]); } printf("\n"); } return 0; }