#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
string ans[20];
bool check(string s){
    bool ret=false;
    int i,j;
    for(i=0;i<20;i++){
        string wk="";
        for(j=0;j<20;j++){
            if(ans[i].size()>j){
                wk+=ans[i];
            }else{
                break;
            }
        }
        if(wk.find(s)!=std::string::npos){
            ret=true;
            break;
        }
    }
    return ret;
}
int main()
{
    int n,m;
    cin>>n>>m;
    string s;
    vector<pair<int,string>> vec;
    int i,j;
    for(i=0;i<m;i++){
        cin>>s;
        bool add=true;
        for(j=0;j<vec.size();j++){
            if(s.size()<=vec[j].second.size()){    
                if(vec[j].second.find(s)==std::string::npos) continue;
                (vec[j].first)++;
                add=false;
                break;
            }else{
                if(s.find(vec[j].second)==std::string::npos) continue;
                (vec[j].first)++;
                vec[j].second=s;
                add=false;
                break;
            }
        }
        if(add){
            vec.push_back({0,s});
        }
    }
    sort(vec.begin(),vec.end());
    for(i=vec.size()-1;i>=0; i--){
        int len=vec[i].second.size();
        if(check(vec[i].second)) continue;
        for(j=0;j<20;j++){
            if(ans[j].size()+len<=20){
                ans[j]+=vec[i].second;
                break;
            }
        }
    }
    for(i=0;i<20;i++){
        for(j=ans[i].size();j<20;j++){
            ans[i]+='.';
        }
        cout<<ans[i]<<endl;
    }
    return 0;
}

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int N,M;
    string a;
    random_device rnd;

    cin >> N >> M;

    for(int i=0; i<M; i++) {
        cin >> a;
    }

    for(int y=0; y<N; y++) {
        for(int x=0; x<N; x++){
            char a = rnd()%8 + 'A';
            cout << a;
        }
        
        cout << endl;
    }
};

