#include <bits/stdc++.h>
using namespace std;
int tot=1,lst=1;
const int N=1e5+6;
struct node{
int ch[30];
int len,fa;
void init(){
for(int i=0;i<30;i++) ch[i]=0;
len=fa=0;
}
}tr[N];
long long dp[N];
long long ans=0;
void insert(int c){
int p=lst,np=lst=++tot;
dp[np]=1;
tr[np].len=tr[p].len+1;
for(;p&&!tr[p].ch[c];p=tr[p].fa) tr[p].ch[c]=np;
if(!p) tr[np].fa=1;
else{
int q=tr[p].ch[c];
if(tr[p].len==tr[q].len-1) tr[np].fa=q;
else{
int nq=++tot;
tr[nq]=tr[q],tr[nq].len=tr[p].len+1;
tr[q].fa=tr[np].fa=nq;
for(;p&&tr[p].ch[c]==q;p=tr[p].fa) tr[p].ch[c]=nq;
}
}
ans+=tr[np].len-tr[tr[np].fa].len;
}
char s[N];
int sl;
struct edge{
int v,nxt;
}e[N];
int head[N],ecnt;
void add(int u,int v){
e[++ecnt].v=v;
e[ecnt].nxt=head[u];
head[u]=ecnt;
}
void dfs(int u){
for(int i=head[u];i;i=e[i].nxt){
dfs(e[i].v);
dp[u]+=dp[e[i].v];
}
ans+=dp[u];
}
int main(){
int t=0;
cin>>t;
while(t--){
scanf("%s",s+1);
sl=strlen(s+1);
lst=tot=1;
for(int i=1;i<=sl;i++) tr[i].init();
for(int i=1;i<=sl;i++) insert(s[i]-'a');
ecnt=0;
for(int i=2;i<=tot;i++) add(tr[i].fa,i);
for(int i=1;i<=tot;i++) dp[i]=0;
cout<<ans<<endl;
ans=0;
}
}