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: Accepted)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxn = 1e6 + 10;

string s[maxn];
int last[30];
int child[maxn][27], cnt[maxn][27];
int newint = 2;

int main(){
	int n;
	cin >> n;
	for (int i = 0; i < n; i++){
		cin >> s[i];
		reverse(s[i].begin(), s[i].end());
	}
	sort(s, s+n, [](string a, string b){ return a.size() < b.size(); });
	ll answer = 0;
	for (int i = 0; i < n; i++){
		int m = s[i].size();
		memset(last, -1, sizeof last);
		for (int j = 0; j < m; j++){
			int c = (int)(s[i][j] - 'a');
			last[c] = j;
		}
		int now = 1;
		for (int j = 0; j < m-1; j++){
			for (int c = 0; c < 26; c++)
				if (last[c] >= j)
					answer += cnt[now][c];
			int c = (int)(s[i][j] - 'a');
			if (child[now][c] == 0)
				child[now][c] = newint ++;
			now = child[now][c];
		}
		cnt[now][(int)(s[i].back() - 'a')] ++;
	}
	cout << answer << endl;
}