// Slower C++ solution:
#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

const int inf = 0x3f3f3f3f;

int mp[30][30];

char str[20][122];

int dp[1<<15][15];

int st[122];

int getval(char *a,char *b)

{

    int la,lb,len;

    la = strlen(a),lb = strlen(b);



    for (int i = 0;i < la;i++)

        if (memcmp( &a[i],b,lb ) == 0) return 0;



    for (len = min(la,lb);len > 0;len--)

    {

        int i,j;

        for (i = la - len,j = 0;j < len;i++,j++)

            if (a[i] != b[j]) break;

        if (j == len) break;

    }

    return lb-len;

}



//int getval(int x,int y ){

//    int l1 = strlen(str[x]);

//    int l2 = strlen(str[y]);

//    if(l1 > l2)

//        for(int i = 0; i < l1; i++){

//            if(i + l2 > l1) break;

//            int h  = 0;

//            for(int j = 0; j < l2; j++){

//                if(str[x][i+j] == str[y][j]){

//                     h++;

//                }

//            }

//            if(h == l2) return 0;

//        }

//    int l = min(l1,l2),id = 0;

//    for(int i = l; i >= 1; i--){

//        bool flag = true;

//        for(int j = 0; j < i; j++){

//            if(str[x][l1 - (i - j)] == str[y][j] ) continue;

//            else {flag = false;break;}

//        }

//        if(flag) {id = i;break;}

//    }

//    //cout<<id<<endl;

//    return l2 - id;

//}

int main(){

    int N;

    while(cin>>N && N){

        memset(st,0,sizeof(st));

        for(int i  = 0; i < N; i++){

            scanf("%s",str[i]);

            st[i] = 1<<i;

        }

        for(int i = 0; i < N; i++){

            for(int j = 0; j < N; j++){

                int t = getval(str[i],str[j]);

                if(t == 0) {

                    st[i] |= 1<<j;

                    mp[i][j] = 0;

                }

                else mp[i][j] = t;

               // cout<<i<<" "<<j<<" "<<mp[i][j]<<endl;

            }





        }

         memset(dp,-1,sizeof(dp));

         for (int i = 0;i < N;i++)

            dp[st[i]][i] = strlen(str[i]);



        for (int s = 0;s < (1<<N);s++)

            for (int i = 0;i < N;i++) if (dp[s][i] != -1)

            {

                for (int j = 0;j < N;j++) if (  !(s&1<<j)  )

                {

                    int tmp = s|st[j];//s|1<<j;

                    if (dp[tmp][j] == -1) dp[tmp][j] = dp[s][i]+mp[i][j];

                    else dp[tmp][j] = min(dp[tmp][j],dp[s][i]+mp[i][j]);

                }

            }



//        memset(dp,0x3f,sizeof(dp));

//        for(int i = 0; i < N; i++){

//                //cout<<s[i]<<endl;

//                dp[1<<i][i] = strlen(str[i]);

//        }

//

//        for(int i = 0; i < 1 << N; i++)

//            for(int j = 0; j < N; j++){

//                if(dp[i][j] == inf) continue;

//               // cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;

//                for(int k = 0; k < N; k++) if(!(i & 1 << k))

//                    dp[i|s[k]][k] = min(dp[i|s[k]][k],dp[i][j] + mp[j][k]);

//            }

        int ans = inf;

        for(int i = 0; i < N; i++)if(dp[(1<<N)-1][i]!=-1)

            ans = min(dp[(1<<N)-1][i],ans);

        cout<<ans<<endl;

    }

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 1.7912574094606346x):
#include<cstdio>

#include<iostream>

#include<cstring>

#include<cmath>

#include<queue>

#include<vector>

#include<map>

#include<cstdlib>

#include<string>

#include<algorithm>

#define mod 998244353;

using namespace std;

char c[25][25],s[25][25];

int n,d[25][25];

bool issub(int x)

{

	for(int i=0;i<n;i++)

	if(i!=x&&strstr(c[i],c[x])!=NULL)return true;

	return false;

}

int gdis(char a[],char b[])

{

	int n=strlen(a);

	int m=strlen(b);

	int ed=min(n,m);

	for(int i=ed;i>=0;i--)

	{

		bool flag=true;

		for(int j=0;j<i;j++)

		{

			if(a[n-i+j]!=b[j])

			{

				flag=false;

				break;

			}

		}

		if(flag) return i;

	 } 

	 return -1;

}

int len[25];

int dp[14][1<<14];

inline void Min(int &a,const int &b)

{

	if(a==-1||b<a)

	a=b;

}

int main()

{

	while(scanf("%d",&n),n)

	{

		for(int i=0;i<n;i++)

		scanf("%s",c[i]);

		int m=0;

		for(int i=0;i<n;i++)

		if(!issub(i))

		{

			strcpy(s[m],c[i]);

			m++;

	    } 

	    n=m;

	    for(int i=0;i<n;i++)

		for(int j=0;j<n;j++)

		if(i!=j)

		{

			d[i][j]=gdis(s[i],s[j]);

		}

		memset(dp,-1,sizeof(dp));

		for(int i=0;i<n;i++)dp[i][1<<i]=len[i]=strlen(s[i]);

		int ed=(1<<n)-1;

		for(int j=1;j<ed;j++)

		{

			for(int i=0;i<n;i++) 

			if(dp[i][j]!=-1)

			{

				for(int k=0;k<n;k++)

				if(!(j>>k&1))

				{

					Min(dp[k][j|(1<<k)],dp[i][j]+len[k]-d[i][k]);

				}

			}

		}

		int ans=-1;

		for(int i=0;i<n;i++)

		if(dp[i][ed]!=-1)

		Min(ans,dp[i][ed]);

		printf("%d\n",ans); 

	}

}