#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
string s;
long long pos[MAXN], tmp[MAXN], sa[MAXN], lcp[MAXN], parr[MAXN], parl[MAXN],
    gapSA, n;
bool SufCmp(long long fr, long long sd) {
  if (pos[fr] != pos[sd]) return pos[fr] < pos[sd];
  return (fr + gapSA < n && sd + gapSA < n) ? pos[fr + gapSA] < pos[sd + gapSA]
                                            : fr > sd;
}
void BuildLCP() {
  long long k = 0;
  for (long long i = 0; i < n; i++) {
    if (pos[i] != n - 1) {
      for (long long j = sa[pos[i] + 1]; s[i + k] == s[j + k];) k++;
      lcp[pos[i]] = k;
      if (k) k--;
    }
  }
}
void Solve() {
  n = s.size();
  for (long long i = 0; i < n; i++) sa[i] = i, pos[i] = (long long)s[i] - 'a';
  for (gapSA = 1; gapSA <= 2 * n; gapSA *= 2) {
    sort(sa, sa + n, SufCmp);
    tmp[0] = 0;
    for (long long i = 1; i < n; i++)
      tmp[i] = tmp[i - 1] + (long long)SufCmp(sa[i - 1], sa[i]);
    for (long long i = 0; i < n; i++) pos[sa[i]] = tmp[i];
  }
  BuildLCP();
  for (long long i = 0; i < n - 1; i++) {
    parl[i] = i - 1;
    while (parl[i] != -1 && lcp[parl[i]] > lcp[i]) parl[i] = parl[parl[i]];
  }
  for (long long i = n - 2; i >= 0; i--) {
    parr[i] = i + 1;
    while (parr[i] != n - 1 && lcp[parr[i]] >= lcp[i]) parr[i] = parr[parr[i]];
  }
  long long ans = 0;
  for (long long i = 0; i < n - 1; i++) {
    ans += (parr[i] - i) * (i - parl[i]) * lcp[i];
  }
  cout << ans * 2 + n * (n + 1) / 2 << "\n";
}
void reset() {
  for (long long i = 0; i < n + 1; i++)
    lcp[i] = sa[i] = parr[i] = parl[i] = pos[i] = 0;
  return;
}
int32_t main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  long long t;
  cin >> t;
  while (t--) {
    cin >> s;
    Solve();
    reset();
  }
  return 0;
}
