#include using namespace std; const int oo = 0x3f3f3f3f; const double eps = 1e-9; const double PI = 2.0 * acos(0.0); typedef long long ll; typedef unsigned long long ull; typedef pair pii; typedef vector vi; typedef vector vs; #define sz(c) int((c).size()) #define all(c) (c).begin(), (c).end() #define FOR(i,a,b) for (int i = (a); i < (b); i++) #define FORS(i,a,b,s) for (int i = (a); i < (b); i=i+(s)) #define FORD(i,a,b) for (int i = int(b)-1; i >= (a); i--) #define FORIT(i,c) for (__typeof__((c).begin()) i = (c).begin(); i != (c).end(); i++) bool piece[1000][1000]; void done(int n, int m, int d){ cout << "A " << d << endl; cout << n << " " << m << " " << endl; FOR(i,0,n){ FOR(j,0,m){ //cout << i*d - (d-1)/2*n << " " << j*d - (d-1)/2*m << endl; if (piece[i*d - (d-1)/2*(n-1)][j*d - (d-1)/2*(m-1)]) cout << '.'; else cout << '#'; } cout << endl; } exit(0); } void done2(int n, int m, int d){ cout << m << " " << n << " " << endl; FOR(j,0,m){ FOR(i,0,n){ //cout << i*d - (d-1)/2*n << " " << j*d - (d-1)/2*m << endl; if (piece[i*d - (d-1)/2*(n-1)][j*d - (d-1)/2*(m-1)]) cout << '.'; else cout << '#'; } cout << endl; } exit(0); } int main(){ int n,m; cin >> n >> m; FOR(i,0,n) FOR(j,0,m){ char x; cin >> x; piece[i][j] = x == '#'; } // 1. option vertical bool bad = false; FOR(i,0,n){ int t = 0; FOR(j,1,m) if (piece[i][j-1] != piece[i][j]) t++; if (t > 1) bad = true; } if (!bad){ bool bad1 = false; bool bad2 = false; FOR(i,0,n){ if (!piece[i][0]) bad1 = true; if (!piece[i][m-1]) bad2 = true; } if (!bad1) done(n,m,-1); if (!bad2) done(n,m,1); } // 2. option horizontal bad = false; FOR(j,0,m){ int t = 0; FOR(i,1,n) if (piece[i-1][j] != piece[i][j]) t++; if (t > 1) bad = true; } if (!bad){ bool bad1 = false; bool bad2 = false; FOR(j,0,m){ if (!piece[0][j]) bad1 = true; if (!piece[n-1][j]) bad2 = true; } if (!bad1) done2(n,m,-1); if (!bad2) done2(n,m,1); } cout << "impossible" << endl; return 0; }