#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <list>
#include <map>
#include <vector>
#include <set>
#include <stack>
#include <string>
#include <utility>
#include <climits>
using namespace std;


#define DEBUG(x) cout << ">>> " << #x << " : " << x << endl;
#define REP(i,a) for (int i = 0; i < (a) ; ++i)
#define FOR(i,a,b) for (int i = (a); i <= (b) ; ++i)
#define FORD(i,a,b) for (int i = (a); i >= (b) ; --i)
#define FOREACH(it,a) for (__typeof((a).begin()) it = (a).begin(); it !=(a).end();++it)


const int INF = 1<<29;
typedef long long ll;
typedef pair<int,int> ii;
typedef vector<ii> vii;
typedef  vector<int> vi;

int main(){
ios_base::sync_with_stdio(false);

int M,N;
string s;
char c;

while(cin >> M >> N,M){
	getline(cin,s);
	REP(i,s.length()){
		c = s[i];
		if(c >= 33 && c <= 126 && c != '\'') break;
	}
	int Mmin1,Nmin1;
	int Mmin2,Nmin2;
	Mmin1 = M;
	Nmin1 = N;
	char H[M][N];
	vii sil;
	REP(m,M){
		getline(cin,s);
		while(s == "") getline(cin,s);
		REP(n,N){
			if(s[n] == c){
				Mmin1 = min(Mmin1,m);
				Nmin1 = min(Nmin1,n);
			} else {
				H[m][n] = s[n];
			}
		}
		
	}

	Mmin2 = M;
	Nmin2 = N;
	REP(m,M){
		getline(cin,s);
		while(s == "") getline(cin,s);
		REP(n,N){
			if(s[n] == c){ 
				Mmin2 = min(Mmin2,m);
				Nmin2 = min(Nmin2,n);
				sil.push_back(ii(m,n));
			} else{
				H[m][n] = s[n];
			}
		}
		
	}
	ii mov = ii(Mmin2-Mmin1,Nmin2-Nmin1);
	FOREACH(it,sil){
		ii p = *it;
		p.first += mov.first;
		p.second += mov.second;
		if(p.first >= 0 && p.first < M && p.second >= 0 && p.second < N){
			H[p.first][p.second] = c;
		}
	}
	REP(m,M){
		REP(n,N) cout << H[m][n];
		cout << endl;
	}
	cout << endl;
		


}

}