#include <iostream>
using namespace std;
void recursion(char *p1[],char *templt[],int n,int &p1length){
char *p2[3000]; //定义一个暂存图形的变量
for(int i=0;i<3000;i++)
p2[i]=new char[3000];
for(int i=0;i<p1length;i++)
for(int j=0;j<p1length;j++){
if(p1[i][j]==' ') {
for (int k1 = i * n; k1 < (i + 1) * n; k1++)
for (int k2 = j * n; k2 < (j + 1) * n; k2++)
p2[k1][k2] = ' ';
}
else{
for (int k1 = i * n; k1 < (i + 1) * n; k1++)
for (int k2 = j * n; k2 < (j + 1) * n; k2++)
p2[k1][k2] = templt[k1%n][k2%n];
}
}
p1length*=n;
for(int i=0;i<p1length;i++)
for(int j=0;j<p1length;j++)
p1[i][j]=p2[i][j];
for(int i=0;i<3000;i++)
delete(p2[i]);
}
int main(){
char *templt[6]; //定义一个存图形的变量
for(int i=0;i<6;i++)
templt[i]=new char[6];
int n;
while(cin>>n){ //读取数据
if(n==0)
return 0;
cin.get();
for(int i=0;i<n;i++){
bool tag=false; //标记输入行末尾是不是少了空格
for(int j=0;j<n;j++){
if(tag){
templt[i][j]=' ';
continue;
}
cin>>noskipws>>templt[i][j];
if(templt[i][j]=='\n'){
templt[i][j]=' ';
tag=true;
}
}
if(!tag)
cin.get();
}
int q;
cin>>skipws>>q;
/* 测试输入结果
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
cout<<temp[i][j];
cout<<endl;
}
*/
int p1length=n;
char *p1[3000]; //定义p1存储目前的图形
for(int i=0;i<3000;i++)
p1[i]=new char[3000];
for(int i=0;i<n;i++) //初始化p1
for(int j=0;j<n;j++)
p1[i][j]=templt[i][j];
for(int iter=1;iter<q;iter++) //递归绘图
recursion(p1,templt,n,p1length);
for(int i=0;i<p1length;i++) { //输出
for (int j = 0; j < p1length; j++)
cout << p1[i][j];
cout << endl;
}
for(int i=0;i<3000;i++)
delete(p1[i]);
}
}