// Slower C++ solution:


#include<bits/stdc++.h>

#define lln long long int

#define llu unsigned lln

#define sc(n) scanf("%d",&n);

#define scl(n) scanf("%lld",&n);

#define scd(n) scanf("%lf",&n);

#define pf(res) printf("%d\n",res);

#define pfl(res) printf("%lld\n",res);

#define pfd(res) printf("%lf\n",res);

#define maxii 100005

using namespace std;

typedef pair<int,int> pii;

typedef pair<lln,lln> pll;

 vector<int> vi[maxii];

 vector<int>:: iterator child;

typedef vector<lln> vl;

typedef vector<pii> vii;

typedef vector<pll> vll;





int arr[maxii];

int arr2[maxii];

bool check[maxii];



bool dfs(int node,int c)

{

    check[node]=true;

    arr2[node]=c;

    for(int child=0;child<vi[node].size();child++)

    {

        if(check[vi[node][child]]==false)

        {

            if(dfs(vi[node][child],c^1)==false)

            {

                return false;

            }

        }

        else if(arr2[node]==arr2[vi[node][child]])

        {

            return false;

        }

        //else if()

    }

    return true;

}



int main()

{

    string aarr[105];

    int n,l;

    cin>>n>>l;

    for(int i=0;i<n;i++)

    {

        cin>>aarr[i];

    }

    sort(aarr,aarr+n);

    for(int i=0;i<n;i++)

    {

        cout<<aarr[i];

    }

}










// Faster C++ solution for the same problem (measured speedup: 3.4592851009684638x):
                                              //BISMILLAHIR RAHMANIR RAHIM

                                               //BY THE NAME OF ALLAH

                                               //FAISAL AHAMMED SHAWON

#include<iostream>

#include<algorithm>

#include<cmath>

#include<string>

#include<vector>

#include<queue>

#include<stack>

#include<utility>

#include<set>

#include<map>

#include<iterator>

#include<numeric>

#define F first

#define S second

#define PB push_back

#define MP make_pair

#define REP(i,a,b) for(int i=a;i<=b;i++)

#define SQ(a) (a)*(a)

#define pi acos(-1.0)

const int MAX=100001;

const int MOD=1e9+7;

int ara[MAX];

typedef long long ll;

typedef unsigned long long ull;

using namespace std;

void fast()

{

ios::sync_with_stdio(false);

cin.tie(NULL); cout.tie(NULL);

}

ll gcd(ll a,ll b)

{

    if(b==0)

    return a;

    else

    gcd(b,a%b);

}

ll lcd(ll a,ll b)

{

    return (a*b)/gcd(a,b);

}



bool f(ll a,ll b)

{

    return a>b;

}

ll max_sum_subarrays(ll ara[],ll n)

{

    ll ans=0,sum=0;

    for(ll k=0;k<n;k++){

        sum=max(ara[k],sum+ara[k]);

        ans=max(ans,sum);

    }

    return ans;

}

ll num_divisors(ll n)

{

    long long cnt=0;

    for(int i=1;i*i<=n;i++)

    {

        if(n%i==0 && i*i==n)

            cnt+=1;

        if(n%i==0 && i*i!=n)

                cnt+=2;

    }

    return cnt;

}

ll comb(ll m, ll n)

{

    ll x = max(m-n,n),ans = 1,i=1;

    for(ll k=m;k>=x+1;k--){

        ans*=k;

        ans/=i;

        i++;

    }

    return ans;

}

ll binsearch(ll low,ll high,ll target)

{

    while(low<=high)

    {

        ll mid=(low+high)/2;

        if(ara[mid]>target)

            high=mid-1;

        else if(ara[mid]<target)

            low=mid+1;

        else return mid;

    }

    return -1;

}

void solve()

{

    int a,b;

    cin>>a>>b;

    vector<string>v(a);

    string ans="";

    for(int i=0;i<a;i++)

        cin>>v[i];

    sort(v.begin(),v.end());

    for(int i=0;i<a;i++)

    {

        ans+=v[i];

    }

    cout<<ans<<endl;

}

int main()

{

    fast();

    solve();

    return 0;

}