#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
vector<int>kmp;
int n;
char t[N],s[N];
void prefix(string s,vector<int> &kmp,int ss){
kmp[0]=0;
for(int i=1;i<ss;i++){
int j=kmp[i-1];
while(j&&s[i]!=s[j])j=kmp[j-1];
if(s[i]==s[j])j++;
kmp[i]=j;
}
return;
}
int KMP(string s,string t,int st,int ss)
{
int pre=0,ps=max(st-ss,0);
if(s[0]==t[ps])pre++;
for(int i=ps+1;i<st;i++){
int j=pre;
while(j&&t[i]!=s[j])j=kmp[j-1];
if(t[i]==s[j])j++;
pre=j;
}
return pre;
}
int main()
{
scanf("%d",&n);
scanf("%s",t);
for(int i=1;i<n;i++)
{
scanf("%s",s);
int ss=strlen(s);
int st=strlen(t);
kmp.resize(ss);
prefix(s,kmp,ss);
int cnt=KMP(s,t,st,ss);
for(int j=cnt;j<ss;j++)
{
t[st++]=s[j];
}
}
printf("%s",t);
return 0;
}