/*
习题2-4 Repeater(北京大学复试上机题)
题目描述:
输入:
输出:
分析:利用数组进行排版
提交网址:http://t.cn/E9jcaVb
*/
#include <iostream>
#include <cstdio>
using namespace std;
#define MAXSIZE 3000
#define MAXN 5
char M[MAXSIZE][MAXSIZE];   // 最终形态
char buf[MAXSIZE][MAXSIZE]; // 中间形态
char temp[MAXN][MAXN];      // 最初模板

int copyTemp(int x, int y, int scaleSize, bool isBlank) {
    // 从M[x][y]开始复制模式
    for (int i = 0; i < scaleSize; ++i) {
        for (int j = 0; j < scaleSize; ++j) {
            if (isBlank)
                M[i + x][j + y] = ' ';
            else
                M[i + x][j + y] = buf[i][j];
        }
    }
    return 0;
}

int repeat(int scaleSize, int tempSize) {
    // 暂存
    for (int i = 0; i < scaleSize; ++i) {
        for (int j = 0; j < scaleSize; ++j) {
            buf[i][j] = M[i][j];
        }
    }
    // 放大
    for (int i = 0; i < tempSize; ++i) {
        for (int j = 0; j < tempSize; ++j) {
            copyTemp(i * scaleSize, j * scaleSize, scaleSize, temp[i][j] == ' ');
        }
    }
    return 0;
}

int main() {
    int N, Q;
    while (scanf("%d", &N) != EOF) {
        getchar();
        if (N == 0)
            break;
        for (int i = 0; i < N; ++i) {
            for (int j = 0; j < N; ++j) {
                scanf("%c", &temp[i][j]);
                M[i][j] = temp[i][j];
            }
            getchar();
        }
        scanf("%d", &Q);
        getchar();
        // 以上是输入部分
        // 按模式复制
        int scaleSize = N;
        for (int scale = 1; scale < Q; ++scale) {
            repeat(scaleSize, N);
            scaleSize *= N;
        }
        // 输出
        for (int i = 0; i < scaleSize; ++i) {
            for (int j = 0; j < scaleSize; ++j)
                cout << M[i][j];
            cout << endl;
        }
    }
    return 0;
}