#include <iostream>
using namespace std;
char ori[10][10];
char ans[2][3000+10][3000+10];
int n, rows; //rows为当前ans中有效的行列数
void nextScale(int old){
int neww = 1 - old;
int now_i=0, now_j=0; //新ans中的位置
for(int i=0; i<n; i++){
for (int j=0; j<n; j++){
if(ori[i][j]==' '){
for(int k=0; k<rows; k++) for(int l=0; l<rows; l++){
ans[neww][k+now_i][l+now_j] = ' ';
}
}else {
for(int k=0; k<rows; k++) for(int l=0; l<rows; l++){
ans[neww][k+now_i][l+now_j] = ans[old][k][l];
}
}
now_j += rows;
}
now_j = 0;
now_i += rows;
}
rows = now_i;
}
int main() {
int scale;
char tmp; // 换行符
while(1){
cin >> n;
if(n==0) break;
scanf("%c", &tmp);
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
scanf("%c", &ori[i][j]);
ans[0][i][j] = ori[i][j];
}
scanf("%c", &tmp);
}
cin >> scale;
int old = 0;
rows = n;
// 依次进行放大,共放大scale次
for(int i=1; i<scale; i++){
nextScale(old);
old = 1 - old;
}
for(int i=0; i<rows; i++){
for(int j=0; j<rows; j++){
cout << ans[old][i][j];
}
cout << endl;
}
}
return 0;
}
// 64 位输出请用 printf("%lld")