func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 2e5 + 5;   char s[MAXN];   int lst = 1, cnt = 1, len[MAXN];   int fa[MAXN], ch[MAXN][26];   int siz[MAXN], c[MAXN], ord[MAXN];   inline int read() {     int x = 0;     char ch = getchar();     while (!isdigit(ch)) ch = getchar();     while (isdigit(ch)) {       x = x * 10 + ch -  0 ;       ch = getchar();     }     return x;   }   inline void insert(int c) {     int p = lst, np = lst = ++cnt;     len[np] = len[p] + 1, siz[np] = 1;     while (p && !ch[p][c]) ch[p][c] = np, p = fa[p];     if (!p) return fa[np] = 1, void();     int q = ch[p][c];     if (len[q] == len[p] + 1) return fa[np] = q, void();     int nq = ++cnt;     fa[nq] = fa[q], fa[q] = fa[np] = nq;     len[nq] = len[p] + 1, memcpy(ch[nq], ch[q], sizeof(ch[q]));     while (ch[p][c] == q) ch[p][c] = nq, p = fa[p];   }   inline void clear() {     lst = cnt = 1;     memset(c, 0, sizeof(c));     memset(fa, 0, sizeof(fa));     memset(ch, 0, sizeof(ch));     memset(siz, 0, sizeof(siz));   }   inline long long solve() {     long long ans = 0;     for (int i = 1; i <= cnt; i++) c[len[i]]++;     for (int i = 1; i <= cnt; i++) c[i] += c[i - 1];     for (int i = cnt; i; i--) ord[c[len[i]]--] = i;     for (int i = cnt; i; i--) siz[fa[ord[i]]] += siz[ord[i]];     for (int i = 1; i <= cnt; i++)       ans += 1ll * (len[i] - len[fa[i]]) * siz[i] * siz[i];     return ans;   }   int main() {     int t = read();     while (t--) {       clear();       scanf( %s , s + 1);       int n = strlen(s + 1);       for (int i = 1; i <= n; i++) insert(s[i] -  a );       printf( %lld n , solve());     }     return 0;   }   