#include #include #define Nmax 1005 using namespace std; char a[Nmax][Nmax]; int xorin[Nmax], xorana[Nmax]; char sol[Nmax][Nmax]; int main() { int n, m, h; //freopen ("fis.in", "r", stdin); //freopen ("fis.out", "w", stdout); scanf ("%d %d %d\n", &n, &m, &h); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf ("%c", &a[i][j]); sol[i][j] = '.'; } scanf ("%*c"); } for (int i = 0; i < h; i++) { for (int j = 0; j < m; j++) { char c; scanf ("%c", &c); if (c == '#') xorin[j] ++; } scanf ("%*c"); } for (int i = 0; i < h; i++) { for (int j = 0; j < n; j++) { char c; scanf ("%c", &c); if (c == '#') xorana[j] ++; } scanf ("%*c"); } //xorin for (int i = 0; i < m; i++) { if (xorin[i] != 0) { for (int j = n - 1; j >=0; j--) { if (a[j][i] == '#') sol[j][i] = xorin[i]; } } } reverse (xorana, xorana +n); //xorana for (int i = 0; i < n; i++) { if (xorana[i] != 0) { for (int j = m - 1; j >= 0; j--) if (a[i][j] == '#' && (sol[i][j] > xorana[i])) { sol[i][j] = xorana[i]; } } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (sol[i][j] != '.') printf ("%d", sol[i][j]); else printf ("%c", sol[i][j]); } printf ("\n"); } return 0; }