Problem:
Score : 700 points

Problem Statement

Limak can repeatedly remove one of the first two characters of a string,
for example abcxyx \rightarrow acxyx \rightarrow cxyx \rightarrow cyx.

You are given N different strings S_1, S_2, \ldots, S_N.
Among N \cdot (N-1) / 2 pairs (S_i, S_j),
in how many pairs could Limak obtain one string from the other?

Constraints

2 \leq N \leq 200\,000

S_i consists of lowercase English letters a-z.

S_i \neq S_j

1 \leq |S_i|

|S_1| + |S_2| + \ldots + |S_N| \leq 10^6

Input

Input is given from Standard Input in the following format.

N
S_1
S_2
\vdots
S_N

Output

Print the number of unordered pairs (S_i, S_j)
where i \neq j and Limak can obtain one string from the other.

Sample Input 1

3
abcxyx
cyx
abc

Sample Output 1

1

The only good pair is (abcxyx, cyx).

Sample Input 2

6
b
a
abc
c
d
ab

Sample Output 2

5

There are five good pairs: (b, abc), (a, abc), (abc, c), (b, ab), (a, ab).

Solution in C++ (GCC 9.2.1) (judge verdict: Runtime Error)

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,cur,pas,b[N],endz[N*10][30],aft[N*10][30],k,ans;
string s[N];
bool  ss(string s1,string s2){
return s1.size()<s2.size();}
int get(){
	int u=0,pas=0;
	b[0]=1<<(s[k][0]-'a');
	for(int i=1;i<s[k].size();i++){
		b[i]=b[i-1]|(1<<(s[k][i]-'a'));
	}
	//cout<<s[k].size()<<endl;
	for(int i=s[k].size()-1;i>=0;i--){
		
		
		if(i==0) break;
		for(int j=0;j<=25;j++){
			if(b[i]&(1<<j)) pas+=endz[u][j];
		}if(!aft[u][s[k][i]-'a']) break;
	u=aft[u][s[k][i]-'a'];}
	return pas;
}
void add(){
	int u=0;
	for(int i=s[k].size()-1;i>=1;i--){
		if(!aft[u][s[k][i]-'a']){
			cur++;
			aft[u][s[k][i]-'a']=cur;
		}
		u=aft[u][s[k][i]-'a'];
	}
	endz[u][s[k][0]-'a']++;
}
int main(){
	cin>>n;
	for(k=1;k<=n;k++){
		cin>>s[k];
	}
	sort(s+1,s+n+1,ss);
	
	for(k=1;k<=n;k++){
		ans+=get();
		add();
	}
	cout<<ans;
}