/* There's no such thing as a limit on being the best. You can always go for more. That's what it means to be human. No... That's what it means to be me. */ #include #include #include #include #include #define FIT(a,b) for(vector::iterator a=b.begin();a!=b.end();a++) #define FITP(a,b) for(vector >::iterator a=b.begin();a!=b.end();a++) #define RIT(a,b) for(vector::reverse_iterator a=b.end();a!=b.begin();++a) #include #define ROF(a,b,c) for(int a=b;a>=c;--a) #include #include #define FOR(a,b,c) for(int a=b;a<=c;++a) #define REP(a,b) for(register int a=0;a #include #include #include #include #define f cin #define g cout #include #define debug cerr<<"OK"; #define pii pair #define mp make_pair #define pb push_back #define fi first #define se second #define ll long long #define ull unsigned long long #define mod 1000000007 #define N 10001 #define SQR 350 #define inf 1<<30 #define div pula #define hi pizda #define down haha using namespace std; /*int dx[]={0,0,0,1,-1}; int dy[]={0,1,-1,0,0};*/ char s[N][N],a[N][N],b[N][N]; int n,m,h,colu[N],rowu[N]; int main () { #ifndef ONLINE_JUDGE freopen("a.in","r",stdin); freopen("a.out","w",stdout); #endif f>>n>>m>>h; FOR(i,1,n) f>>(s[i]+1); FOR(i,1,h) f>>(a[i]+1); FOR(i,1,h) f>>(b[i]+1); FOR(i,1,h) FOR(col,1,m) { if(a[i][col]=='#') colu[col]=max(colu[col],h-i+1); } FOR(i,1,h) FOR(row,1,n) { if(b[i][row]=='#') rowu[n-row+1]=max(rowu[n-row+1],h-i+1); } FOR(i,1,n) FOR(j,1,m) { if(s[i][j]=='#') { ROF(k,h,1) if(k<=rowu[i]&&k<=colu[j]) { s[i][j]=k+'0'; break; } } } FOR(i,1,n) g<<(s[i]+1)<<"\n"; return 0; }