#include <stack>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1314;
string s[N];
vector<int> g[N];
stack<string> ans;
bool vis[N], flg = 0;
int n, d[N], st = -1, ed = -1;
void dfs(int u) {
for (int &v: g[u]) {
if (!vis[v]) {
vis[v] = 1;
dfs(v);
}
}
ans.push(s[u]);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++)
cin >> s[i];
sort(s + 1, s + 1 + n);
for (int i = 1; i <= n; i++) {
int pos = s[i].size() - 1;
for (int j = 1; j <= n; j++) {
if (i == j) continue ;
if (s[i][pos] == s[j][0]) {
g[i].push_back(j);
d[j]++;
d[i]--;
}
}
}
bool b = 0;
for (int i = 1; i <= n; i++) {
if (!d[i]) continue ;
if (d[i] == -1 && st == -1) st = i;
else if (d[i] == 1 && ed == -1) ed = i;
else {
b = 1;
break ;
}
}
if (st != ed && min(st, ed) == -1) b = 1;
if (b) {
cout << "***";
return 0;
}
dfs(max(st, 1));
while (ans.size()) {
if (flg) cout << '.';
else flg = 1;
cout << ans.top();
ans.pop();
}
return 0;
}