#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cctype>
#include<cstdlib>
#include<algorithm>
#include<bitset>
#include<vector>
#include<list>
#include<deque>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<cmath>
#include<sstream>
#include<fstream>
#include<iomanip>
#include<ctime>
#include<complex>
#include<functional>
#include<climits>
#include<cassert>
#include<iterator>
using namespace std;
int n;
priority_queue<string,vector<string>,greater<string> > q;
vector<string> v;
int main(){
	scanf("%d", &n);
	for (int i = 0; i < n; i++){
		string k;
		cin >> k;
		v.push_back(k);
	}
	char B = 'z';
	B++;
	int maxt = 0;
	for (int i = 0; i < n; i++){
		maxt = max(maxt, (int)(v[i].size()));
	}
	for (int i = 0; i < n; i++){
		while (v[i].size() != maxt){
			v[i].push_back(B);
		}
		q.push(v[i]);
	}
	while (!q.empty()){
		string kari = q.top();
		q.pop();
		cout << kari[0];
		if (kari.size() == 1){
			continue;
		}
		if (kari[1] == B){
			continue;
		}
		kari.erase(0, 1);
		kari.push_back(B);
		q.push(kari);
	}
	return 0;
}