#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]);
    }
}