#include <bits/stdc++.h>
#define rep(i,n) for(int i=1;i<=n;++i)
#define mp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define LL long long
#define x0 gtmsub
#define y0 gtmshb
#define x1 gtmjtjl
#define y1 gtmsf
using namespace std;
struct Node
{
	int next[27];
	int terminal,father,fail,deg,sum;
}node[310000];
char ssss[300];
string s[11000];
int top,n;
void getstr(string &s)
{
	scanf("%s",ssss);
	int len=strlen(ssss);
	s="";
	for(int i=0;i<len;i++)s+=ssss[i];
}
int newnode()
{
	top++;
	for(int i=1;i<=26;i++)node[top].next[i]=0;
	node[top].terminal=node[top].fail=node[top].sum=node[top].deg=0;
	return top;
}
void add(string &st)
{
	int len=st.length(),x=1;
	for(int i=0;i<len;i++)
	{
		int ind=st[i]-'a'+1;
		if(!node[x].next[ind])
		{
			node[x].next[ind]=newnode();
			node[top].father=x;
		}
		x=node[x].next[ind];
	}
	node[x].terminal=1;
}
int q[310000],head,tail;
void build()
{
	head=0,tail=1;q[1]=1;
	while (head!=tail)
	{
		int x=q[++head];
		node[x].terminal|=node[node[x].fail].terminal;
		for(int i=1;i<=26;i++)
			if (node[x].next[i])
			{
				if (x==1)node[node[x].next[i]].fail=1;
				else
				{
					int y=node[x].fail;
					while (y)
					{
						if (node[y].next[i])
						{
							node[node[x].next[i]].fail=node[y].next[i];
							break;
						}
						y=node[y].fail;
					}
					if (!node[node[x].next[i]].fail)node[node[x].next[i]].fail=1;
				}
				q[++tail]=node[x].next[i];
			}
	}
	for(int i=1;i<=top;i++)
	{
		node[i].deg=0; 
		node[i].sum=1;
	}
	for(int i=1;i<=top;i++)node[node[i].fail].deg++;
	head=0; tail=0;
	for(int i=1;i<=top;i++)if (node[i].deg==0)q[++tail]=i;
	while (head<tail)
	{
		int x=q[++head];
		node[node[x].fail].sum+=node[x].sum;
		node[node[x].fail].deg--;
		if(node[node[x].fail].deg==0)q[++tail]=node[x].fail;
	}
}
void work()
{
	long long ans=1ll*(top-1)*(top-1);
	for(int i=2;i<=top;i++)
		if (node[i].fail!=1)
		{
			int j=node[i].fail;
			int p=i;
			while (j!=1)
			{
				p=node[p].father;
				j=node[j].father;
			}
			ans-=(node[p].sum-1);
		}
	printf("%lld\n",ans);
}
int main()
{
	while (1)
	{
		scanf("%d",&n);
		if (n==0)break;
		top=-1; newnode(); newnode();
		for(int i=1;i<=n;i++)
		{
			getstr(s[i]);
			add(s[i]);
		}
		build();
		work();
	}
}