#include <bits/stdc++.h>
using namespace std;
void dfs(long long v, vector<long long> adj[], vector<bool>& visited) {
  cout << char(v + 'a');
  visited[v] = true;
  for (long long u : adj[v]) {
    if (!visited[u]) dfs(u, adj, visited);
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  long long n;
  cin >> n;
  vector<long long> adj[26];
  set<char> st;
  vector<string> store;
  for (long long i = 0; i < n; i++) {
    string s;
    cin >> s;
    store.push_back(s);
    st.insert(s[0]);
    for (long long j = 0; j < s.length() - 1; j++) {
      long long a = s[j] - 'a', b = s[j + 1] - 'a';
      adj[a].push_back(b);
    }
  }
  queue<long long> q;
  vector<bool> visited(26, false);
  for (auto it : st) {
    bool boo = true;
    for (long long i = 0; i < store.size(); i++) {
      string s = store[i];
      for (long long j = 1; j < s.length(); j++) {
        if (s[j] == it) {
          boo = false;
          goto h;
        }
      }
    }
  h:;
    if (boo) {
      q.push(it - 'a');
      visited[it - 'a'] = true;
    }
  }
  while (!q.empty()) {
    long long v = q.front();
    q.pop();
    dfs(v, adj, visited);
  }
}
