#include <bits/stdc++.h>
using namespace std;
#define F(i,L,U) for((i)=(L);(i)<(U);(i)++)
#define FE(i,L,U) for((i)=(L);(i)<=(U);(i)++)
typedef vector<int> vi;
// class UF{
// public:
// vi p, rank, setSize, m;
// int numSets;
//
// UF(int N){
// m.assign(N, 0);
// setSize.assign(N, 1); numSets = N; rank.assign(N,0);
// p.assign(N,0);
// for(int i = 0; i < N; i++) {
// p[i] = i;
// m[i] = i;
// }
//
// }
//
// int findSet(int i){
//
// if (p[i] == i){
// return i;
//
// }else{
// int x = findSet(p[i]);
// m[i] = max(m[i], m[x]);
// return p[i] = x;
//
// }
//
// // return (p[i] == i) ? i : (p[i] = findSet(p[i]););
//
// }
//
// bool isSameSet(int i, int j){
// return findSet(i) == findSet(j);
// }
//
// void unionSet(int i, int j){
// if (!isSameSet(i,j)){
// numSets--;
// int x = findSet(i), y = findSet(j);
//
// if (rank[x] > rank[y]){
// m[x] = max(m[x], m[y]);
// p[y] = x; setSize[x] += setSize[y];
// }else{
// m[y] = max(m[x], m[y]);
// p[x] = y; setSize[y] += setSize[x];
//
// if (rank[x] == rank[y]) rank[y]++;
// }
//
//
// }
//
// }
//
// };
#define LINE(line) fgets(line, sizeof(line), stdin)
int M, N;
char C;
char line[200];
char st[4][1005][1005];
// 0 pattern
// 1 m1
// 2 m2
// 3 res
int fx, fy, nx, ny;
int main(){
int i, j, k;
// int fline = 1;
while(LINE(line)){
// printf("befing:: %s", line);
// printf("%c\n", (char)39);
if (strcmp(line, "0 0 ' '\n") == 0) break;
sscanf(line, "%d %d '%c'", &M, &N, &C);
// if (M == 0 || N == 0) break;
// printf("M=%d N=%d C=%c\n",M, N, C);
// if (fline == 1){
// fline = 0;
// }else{
//
// }
F(i,0,M){
LINE(st[1][i]);
// printf("%s", st[1][i]);
}
LINE(line);// empty line
// printf("\n");
F(i,0,M){
LINE(st[2][i]);
// printf("%s", st[2][i]);
}
LINE(line);// empty line
fx = nx = -1;
F(i,0,M){
F(j,0,N){
if (nx == -1){
if (st[2][i][j] == C){
nx = j;
ny = i;
}
}
if (st[2][i][j] == C){
st[0][i][j] = C;
}
if (st[1][i][j] == C){
if (fx == -1){
fx = j;
fy = i;
}
st[3][i][j] = st[2][i][j];
}else{
st[3][i][j] = st[1][i][j];
}
}
}
int dx = nx - fx, dy = ny - fy;
// printf("dx=%d dy=%d\n", dx, dy);
F(i,0,M){
F(j,0,N){
if (st[0][i][j] == C){
int x = j + dx;
int y = i + dy;
if (x >= 0 && x < N && y >= 0 && y < M){
st[3][y][x] = C;
}
}
}
}
F(i,0,M){
F(j,0,N){
printf("%c", st[3][i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}Diff to submission s768