#include<cstdio> #include<fstream> #include<iostream> #include<iomanip> #include<algorithm> #include<vector> #include<bitset> #include<deque> #include<queue> #include<set> #include<map> #include<cmath> #include<cstring> #include<ctime> #include<cstdlib> #include<unordered_map> #define ll long long #define pb push_back #define mp make_pair #define pii pair<int,int> #define pll pair<ll,ll> #define all(x) (x).begin(), (x).end() #define fi first #define se second using namespace std; const int nmax = 1005; int n, m, h, i, j, k, cnt; char s[nmax][nmax], a[nmax][nmax], sol[nmax][nmax]; int main() { // freopen("test.in", "r", stdin); // freopen("test.out", "w", stdout); scanf("%d%d%d", &n, &m, &h); for(i = 1; i <= n; i++) scanf("%s", s[i] + 1); for(i = 1; i <= n; i++) for(j = 1; j <= m; j++) { if(s[i][j] == '#') sol[i][j] = '9'; else sol[i][j] = s[i][j]; } for(i = 1; i <= h; i++) scanf("%s", a[i] + 1); for(i = 1; i <= m; i++) { cnt = 0; for(j = h; j; j--) { if(a[j][i] == '#') cnt++; else break; } for(j = 1; j <= n; j++) if(s[j][i] == '#') sol[j][i] = min(sol[j][i], (char)(cnt + '0')); } for(i = 1; i <= h; i++) scanf("%s", a[i] + 1); for(i = 1, k = n; i <= n; i++, k--) { cnt = 0; for(j = h; j; j--) { if(a[j][i] == '#') cnt++; else break; } for(j = 1; j <= m; j++) if(s[k][j] == '#') sol[k][j] = min(sol[k][j], (char)(cnt + '0')); } for(i = 1; i <= n; i++) printf("%s\n", sol[i] + 1); return 0; }