#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")