#include <bits/stdc++.h>
using namespace std;
vector<int> nxt[30];
bool vis[30], mark[30];
string res = "";
int in[30];
void DFS(int u) {
  vis[u] = true;
  res += u + 'a';
  for (int i = 0; i < nxt[u].size(); i++) {
    int v = nxt[u][i];
    if (in[v] != 0 && vis[v] == false) {
      DFS(v);
    }
  }
}
int main() {
  int n;
  cin >> n;
  string a;
  for (int i = 0; i < n; i++) {
    cin >> a;
    for (int j = 0; j < a.size(); j++) {
      if (j != a.size() - 1) {
        nxt[a[j] - 'a'].push_back(a[j + 1] - 'a');
        in[a[j + 1] - 'a']++;
      }
      mark[a[j] - 'a'] = true;
    }
  }
  for (int i = 0; i < 26; i++) {
    if (in[i] == 0 && mark[i]) {
      DFS(i);
    }
  }
  cout << res << endl;
  return 0;
}
