#include <bits/stdc++.h>
using namespace std;
template <class T>
T gcd(T a, T b) {
  return (b == 0) ? a : gcd(b, a % b);
}
template <class T>
T lcm(T a, T b) {
  return (a * b) / gcd(a, b);
}
template <class T>
T powmod(T a, T b, T mod) {
  T res = 1;
  if (a >= mod) a %= mod;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a;
    if (res >= mod) res %= mod;
    a = a * a;
    if (a >= mod) a %= mod;
  }
  return res;
}
int flag[27];
int flag1[27];
set<char> se;
void dfs(char v) {
  printf("%c", v);
  if (!flag[v - 'a']) return;
  dfs(flag[v - 'a']);
}
int main() {
  int n, i, j;
  scanf("%d", &n);
  set<char>::iterator it1;
  for (i = 0; i < n; i++) {
    string s;
    cin >> s;
    se.insert(s[0]);
    for (j = 0; j < s.size() - 1; j++) {
      flag[s[j] - 'a'] = s[j + 1];
      flag1[s[j + 1] - 'a'] = 1;
    }
  }
  set<char>::iterator it;
  for (it = se.begin(); it != se.end(); it++) {
    if (flag1[(*it) - 'a'] == 0) {
      dfs(*it);
    }
  }
  cout << "\n";
  return 0;
}
