#include #include using namespace std; int main() { int n,m; cin >> n; string num1[n]; for(int i = 0; i < n; i++){ cin >> num1[i]; } m = num1[0].size(); int x,y; cin >> x; string num2[x]; for(int i = 0; i < x; i++){ cin >> num2[i]; } y = num2[0].size(); long long decoded_num1 = 1; for(int i = 1; i < n; i ++){ int pos1 ,pos2; for(int j = 0; j < m; j ++){ if(num1[i-1][j] == '#')pos1 = j; else if(num1[i][j] == '#')pos2 = j; } int relative_pos = pos1-pos2; decoded_num1*=2; if(relative_pos == 1)decoded_num1++; } long long decoded_num2 = 1; for(int i = 1; i < x; i ++){ int pos1 ,pos2; for(int j = 0; j < y; j ++){ if(num2[i-1][j] == '#')pos1 = j; else if(num2[i][j] == '#')pos2 = j; } int relative_pos = pos1-pos2; decoded_num2*=2; if(relative_pos == 1)decoded_num2++; } long long sum = decoded_num1 + decoded_num2; vector positions; int cur_pos = 0; positions.push_back(cur_pos); int minn = 0, maxx = 0; while(sum > 1){ int yy = sum%2; if(yy == 0){ cur_pos--; } else cur_pos++; positions.push_back(cur_pos); minn = min(minn,cur_pos); maxx = max(maxx,cur_pos); sum/=2; } int lengthh = maxx-minn+1; cout << positions.size() << endl; for(int i = positions.size()-1; i >= 0; i--){ for(int j = 0; j < lengthh; j++){ if(j == positions[i] - minn)cout << '#'; else cout << '.'; } if(i!=0)cout << endl; } }