func_code_string: #include <bits/stdc++.h>   using namespace std;   char str[200000 + 5];   long long f[200000 + 5];   struct node {     int nxt[26];     int fa;     long long len;   } t[200000 + 10];   long long ans = 0;   int last, tot;   vector<int> g[200000 + 5];   void insrt(int x) {     int nd = ++tot;     f[nd] = 1;     int p = last;     last = nd;     t[nd].len = t[p].len + 1;     for (; p && t[p].nxt[x] == 0; p = t[p].fa) t[p].nxt[x] = nd;     if (!p)       t[nd].fa = 1;     else {       int q = t[p].nxt[x];       if (t[p].len + 1 == t[q].len)         t[nd].fa = q;       else {         int nt = ++tot;         t[nt] = t[q];         t[nd].fa = t[q].fa = nt;         t[nt].len = t[p].len + 1;         for (; t[p].nxt[x] == q && p; p = t[p].fa) t[p].nxt[x] = nt;       }     }   }   void init() {     last = 1, tot = 1;     memset(t, 0, sizeof(t));     for (int i = 0; i <= 200000 + 3; i++) g[i].clear(), f[i] = 0;   }   void dfs(int u) {     for (int i = 0; i < g[u].size(); i++) {       dfs(g[u][i]);       f[u] += f[g[u][i]];     }     ans += (t[u].len - t[t[u].fa].len) * f[u] * f[u];     return;   }   int main() {     int T_T;     cin >> T_T;     while (T_T--) {       scanf( %s , str);       int len = strlen(str);       init();       ans = 0;       for (int i = 0; i < len; i++) insrt(str[i] -  a );       for (int i = 1; i <= tot; i++) g[t[i].fa].push_back(i);       dfs(0);       printf( %lld n , ans);     }     return 0;   }   