#include<bits/stdc++.h>
#define FILE "string"
#define MAXN 1000100
using namespace std;
typedef long long ll;
int Case,n,cnt,pos[MAXN],deep[MAXN],fail[MAXN],q[MAXN],size[MAXN],tr[MAXN][26];
ll ans;
char ch[MAXN];
void insert(){
int len=strlen(ch+1),now=0;
for(int i=1;i<=len;++i){
if(!tr[now][ch[i]-'a']) tr[now][ch[i]-'a']=++cnt,deep[cnt]=i;
now=tr[now][ch[i]-'a'];
}
}
void build(){
int head=0,tail=0;
for(int i=0;i<26;++i)if(tr[0][i])q[++tail]=tr[0][i];
while(++head<=tail){
int x=q[head];
for(int i=0;i<26;++i)if(tr[x][i]){
q[++tail]=tr[x][i];
int temp=fail[x];
while(temp&&!tr[temp][i])temp=fail[temp];
fail[tr[x][i]]=tr[temp][i];
}
}
for(int i=tail;i;--i) size[fail[q[i]]]+=(++size[q[i]]);
}
void dfs(int x,int depth){
pos[depth]=x;
if(fail[x]) ans+=size[pos[depth-deep[fail[x]]]]-1;
for(int i=0;i<26;++i)if(tr[x][i])dfs(tr[x][i],depth+1);
return;
}
int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
int __size__=256<<20;
char *__p__=(char*)malloc(__size__)+__size__;
__asm__("movl %0, %%esp\n"::"r"(__p__));
scanf("%d%d",&Case,&n);
for(int i=1;i<=n;++i){
scanf("%s",ch+1);
insert();
}
build(); dfs(0,0);
printf("%lld\n",(ll)cnt*cnt-ans);
return 0;
}