#include #include #include #include using namespace std; int main() { int N; cin >> N; vector S(N); for (int i = 0; i < N; ++i) { cin >> S[i]; } vector A(N - 1); for (int i = 1; i < N; ++i) { int lcp = 0; for (int j = 0; j < S[i - 1].size() && j < S[i].size(); ++j) { if (S[i][j] != S[i - 1][j]) break; ++lcp; } A[i - 1] = lcp; } vector p(N - 1); for (int i = 0; i < N - 1; ++i) { p[i] = i; } sort(p.begin(), p.end(), [&](int i, int j) { return A[i] < A[j]; }); set s; s.insert(-1); s.insert(N - 1); long long ans = 0; for (int i = 0; i < N - 1; ++i) { set::iterator it = s.lower_bound(p[i]); int r = *it, l = *(--it); ans += 1LL * (A[p[i]]) * (r - p[i]) * (p[i] - l) * (r - l + 2) / 2; s.insert(p[i]); } for (int i = 0; i < N; ++i) { ans += S[i].size(); } cout << ans << endl; return 0; }