#include<bits/stdc++.h>
using namespace std;
#define delta 0.9975
const int N=20;
int n,ans,p[N];
double t;
struct node{
string x,y;
int len;
}mp[N];
int calc(int x[])
{
int res=mp[x[1]].len;
for(int i=2;i<=n;i++)
if(mp[x[i]].x==mp[x[i-1]].y)
res+=mp[x[i]].len;
else break;
return res;
}
void SA()
{
int a[N];
for(int i=1;i<=n;i++)
a[i]=p[i];
t=1600;
while(t>1e-18)
{
int b[N];
for(int i=1;i<=n;i++) b[i]=a[i];
int x=rand()%n+1;
int y=rand()%n+1;
swap(b[x],b[y]);
int now=calc(b);
double Delta=now-ans;
if(Delta>0)
{
ans=now;
for(int i=1;i<=n;i++)
p[i]=a[i]=b[i];
}
else if(exp((double)-Delta/t)*RAND_MAX<rand())
{
for(int i=1;i<=n;i++) a[i]=b[i];
}
t*=delta;
}
}
void work()
{
while((double)clock()/CLOCKS_PER_SEC<=0.97) SA();
}
int main()
{
srand(time(0));
cin>>n;
string s;
for(int i=1;i<=n;i++)
{
cin>>s;
int len=s.length();
mp[i].len=len;
mp[i].x=s[0];
mp[i].y=s[len-1];
}
for(int i=1;i<=n;i++) p[i]=i;
ans=calc(p);
work();
cout<<ans;
return 0;
}