#include <iostream> #include <vector> #include <cstdlib> using namespace std; int matr[1001][1001]; char top[1001][1001]; char view1[10][1001]; char view2[10][1001]; int hh1[1001]; int hh2[1001]; vector <pair <int, int> > h1; vector <pair <int, int> > h2; int n, m, h; int getH(int h, char vi[][1001], int col) { int val=0; while(val<h && vi[val][col]=='.') val++; return h-val; } void complete() { int i, j; //if(!check()) // return; for(i=0;i<n;i++) for(j=0;j<m;j++) if(!matr[i][j] && top[i][j]=='#') matr[i][j]=1; for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(matr[i][j]) cout<<matr[i][j]; else cout<<'.'; } cout<<'\n'; } exit(0); } void backt2(int k) { int i; if(k>=h2.size()) complete(); for(i=0; i<m; i++) { if(matr[h2[k].first][i]!=0 && matr[h2[k].first][i]!=h2[k].second) continue; if(h2[k].second>hh1[i]) continue; if(top[h2[k].first][i]=='.') continue; matr[h2[k].first][i]=h2[k].second; backt2(k+1); matr[h2[k].first][i]=0; } } void backt1(int k) { int i; if(k>=h1.size()) backt2(0); for(i=0; i<n; i++) { if(h1[k].second>hh2[n-i-1]) continue; if(top[i][h1[k].first]=='.') continue; matr[i][h1[k].first]=h1[k].second; backt1(k+1); matr[i][h1[k].first]=0; } } int main() { //int n, m, h; int i; cin>>n>>m>>h; for(i=0;i<n;i++) cin>>top[i]; for(i=0;i<h;i++) cin>>view1[i]; for(i=0;i<h;i++) cin>>view2[i]; for(i=0;i<m;i++) { hh1[i]=getH(h, view1, i); if(hh1[i]) h1.push_back(make_pair(i, hh1[i])); } for(i=0;i<n;i++) { hh2[i]=getH(h, view2, i); if(hh2[i]) h2.push_back(make_pair(n-i-1, hh2[i])); } backt1(0); return 0; }