Files
OI-source/2.11732.cpp
2023-08-03 09:22:52 +08:00

66 lines
970 B
C++

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
int son[4000010],bro[4000010],l[4010],n,sz;
LL size[4000010];
char ch[4000010],s[4010][1010];
void init()
{
int i;
for(i=1;i<=n;i++)
{
scanf("%s",s[i]+1);
l[i]=strlen(s[i]+1);
}
memset(son,0,sizeof(son));
memset(bro,0,sizeof(bro));
sz=0;
}
LL solve()
{
init();
int i,j,k,p,tmp;
bool flag;
LL res=0,last;
for(i=1;i<=n;i++)
{
p=0;
last=i-1;
for(j=1;j<=l[i]+1;j++)
{
flag=0;
for(k=son[p];k;tmp=k,k=bro[k])
if(ch[k]==s[i][j])
{
flag=1;
break;
}
if(flag) p=k;
else
{
if(!son[p]) son[p]=++sz;
else bro[tmp]=++sz;
p=sz;
ch[p]=s[i][j];
size[p]=0;
}
res+=size[p]+last;
last=size[p];
size[p]++;
}
}
return res;
}
int main()
{
#ifdef local
freopen("pro.in","r",stdin);
#endif
int K=0;
while(scanf("%d",&n)==1&&n)
printf("Case %d: %lld\n",++K,solve());
return 0;
}