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;

const int MX = 1000000;

struct {
	int total, cnt[26], to[26];
} t[MX + 1];

int main() {
	int n, tv = 1;
	ignore = scanf("%d", &n);
	
	vector<pair<int, int>> queries;
	for (int i = 0; i < n; i++) {
		static char s[MX + 1];
		ignore = scanf("%s", s);
		
		int len = strlen(s);
		reverse(s, s + len);
		
		vector<int> left(26, 0);
		for (int j = 0; j < len; j++) left[s[j] - 'a']++;
		
		auto add = [&left](int v) {
			t[v].total++;
			for (int c = 0; c < 26; c++) {
				if (left[c] > 0) t[v].cnt[c]++;
			}
		};
		
		add(0);
		
		for (int j = 0, v = 0; j < len; j++) {
			int c = s[j] - 'a';
			
			if (j == len - 1) queries.emplace_back(v, c);
			
			if (t[v].to[c] == 0) {
				t[v].to[c] = tv++;
			}
			
			v = t[v].to[c];
			left[c]--;
			
			add(v);
		}
	}
	
	long long ans = 0;
	for (auto& q : queries) {
		ans += t[q.first].cnt[q.second] - 1;
	}
	
	printf("%lld\n", ans);
	
	return 0;
}