#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define rep(i,l,r) for(register ll i=(l);i<=(r);++i)
#define Rep(i,l,r) for(register ll i=(r);i>=(l);--i)
#define all(x) x.begin(),x.end()
using namespace std;
const ll N=200009,INF=1e18;
ll f[21][1<<21],d[21][21],n;
string s[21],t[21];
ll nxt[N];
ll TSP(){
ll nPtn=(1ll<<n+1);
rep(i,0,n)rep(p,0,nPtn-1)f[i][p]=INF;
f[0][1]=0;
map<ll,ll>LOG2;
rep(i,0,15)LOG2[1ll<<i]=i;
for(ll p=1;p<nPtn;p++)
for(ll s=p;s;s&=(s-1)){
ll LSB_s=s&(-s);
ll i=LOG2[LSB_s];
ll q=LSB_s^p;
for(ll t=q;t;t&=(t-1)){
ll j=LOG2[t&(-t)];
f[i][p]=min(f[i][p],f[j][q]+d[j][i]);
}
}
ll ans=INF;
rep(i,1,n)ans=min(ans,f[i][nPtn-1]);
return ans;
}
void KMP(string ptn){
ll lP=ptn.size();
ptn=' '+ptn;
rep(i,1,lP)nxt[i]=0;
for(ll iP=2,j=0;iP<=lP;iP++){
while(j&&ptn[j+1]!=ptn[iP])j=nxt[j];
if(ptn[j+1]==ptn[iP])j++;
nxt[iP]=j;
}
}
bool inced[30];
int main(){
cin>>n;
rep(i,1,n)cin>>s[i];
rep(i,1,n)rep(j,1,n)if(i!=j&&s[j].size()<s[i].size()){
KMP(s[j]);string ptn=' '+s[j],txt=' '+s[i];
ll iP=0;
ll lT=s[i].size(),lP=s[j].size();
for(ll iT=1;iT<=lT;iT++){
while(iP&&txt[iT]!=ptn[iP+1])iP=nxt[iP];
if(txt[iT]==ptn[iP+1])iP++;
if(iP==lP){inced[j]=1; break;}
}
}
ll m=0;
rep(i,1,n){if(!inced[i])t[++m]=s[i];s[i]="";}
n=m; rep(i,1,n)s[i]=t[i];
rep(i,1,n)d[0][i]=s[i].size();
rep(i,1,n){
rep(j,1,n)
if(i!=j){
string x=s[j]+s[i];
KMP(x);
ll len=x.size();
ll lmt=min(s[i].size(),s[j].size());
while(len>lmt)len=nxt[len];
d[i][j]=s[j].size()-len;
}
}
cout<<TSP()<<endl;
return 0;
}