/*
习题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;
}