#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 50005
string s;
int n,stp;
int SA[MAX],iSA[MAX],LCP[MAX],temp[MAX]={0};
bool cmp(int i,int j)
{
if(iSA[i]!=iSA[j])
return iSA[i]<iSA[j];
i+=stp;
j+=stp;
return (i<n && j<n)?(iSA[i]<iSA[j]):i>j;
}
void constructSA()
{
n=s.length();
for(int i=0;i<n;i++)
{
SA[i]=i;
iSA[i]=(int)s[i];
}
memset(temp,0,sizeof temp);
for(stp=1;;stp*=2)
{
sort(SA,SA+n,cmp);
for(int i=0;i<n-1;i++)
temp[i+1]=temp[i]+cmp(SA[i],SA[i+1]);
for(int i=0;i<n;i++)
{
iSA[SA[i]]=temp[i];
}
if(temp[n-1]==n-1)
break;
}
}
void constructLCP()
{
for(int i=0,k=0;i<n;i++)
{
if(iSA[i]!=n-1)
{
int j=SA[iSA[i]+1];
while(s[i+k]==s[j+k])
k++;
LCP[iSA[i]]=k;
if(k>0)
k--;
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
int ans=0;
cin>>s;
constructSA();
constructLCP();
for(int i=0;i<n;i++)
ans+=LCP[i];
cout<<((n*(n+1))/2)-ans<<endl;
/*memset(SA,0,sizeof SA);*/
memset(iSA,0,sizeof iSA);
memset(LCP,0,sizeof LCP);
memset(temp,0,sizeof temp);
}
}
I2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxpb3N0cmVhbT4KI2luY2x1ZGU8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIE1BWCA1MDAwNQpzdHJpbmcgczsKaW50IG4sc3RwOwppbnQgU0FbTUFYXSxpU0FbTUFYXSxMQ1BbTUFYXSx0ZW1wW01BWF09ezB9Owpib29sIGNtcChpbnQgaSxpbnQgaikKewoJaWYoaVNBW2ldIT1pU0Fbal0pCiAJcmV0dXJuIGlTQVtpXTxpU0Fbal07CglpKz1zdHA7CQoJais9c3RwOwoJcmV0dXJuIChpPG4gJiYgajxuKT8oaVNBW2ldPGlTQVtqXSk6aT5qOyAKfQp2b2lkIGNvbnN0cnVjdFNBKCkKewoJbj1zLmxlbmd0aCgpOwoJZm9yKGludCBpPTA7aTxuO2krKykKCXsKCQlTQVtpXT1pOwoJCWlTQVtpXT0oaW50KXNbaV07Cgl9CgltZW1zZXQodGVtcCwwLHNpemVvZiB0ZW1wKTsKCWZvcihzdHA9MTs7c3RwKj0yKQoJewoJCXNvcnQoU0EsU0ErbixjbXApOwoJCWZvcihpbnQgaT0wO2k8bi0xO2krKykKCQl0ZW1wW2krMV09dGVtcFtpXStjbXAoU0FbaV0sU0FbaSsxXSk7CQoJCWZvcihpbnQgaT0wO2k8bjtpKyspCgkJewoJCQlpU0FbU0FbaV1dPXRlbXBbaV07CgkJfQoJCWlmKHRlbXBbbi0xXT09bi0xKQoJCWJyZWFrOwoJfQoJCn0Kdm9pZCBjb25zdHJ1Y3RMQ1AoKQp7Cglmb3IoaW50IGk9MCxrPTA7aTxuO2krKykKCXsKCQlpZihpU0FbaV0hPW4tMSkKCQl7CgkJCWludCBqPVNBW2lTQVtpXSsxXTsKCQkJd2hpbGUoc1tpK2tdPT1zW2ora10pCgkJCWsrKzsKCQkJTENQW2lTQVtpXV09azsKCQkJaWYoaz4wKQoJCQlrLS07CgkJfQoJfQp9CmludCBtYWluKCkKewoJaW50IHQ7CgljaW4+PnQ7Cgl3aGlsZSh0LS0pCQoJewoJCWludCBhbnM9MDsKCQljaW4+PnM7CgkJY29uc3RydWN0U0EoKTsKCQljb25zdHJ1Y3RMQ1AoKTsKCQlmb3IoaW50IGk9MDtpPG47aSsrKQoJCWFucys9TENQW2ldOwoJCWNvdXQ8PCgobioobisxKSkvMiktYW5zPDxlbmRsOwoJCS8qbWVtc2V0KFNBLDAsc2l6ZW9mIFNBKTsqLwoJCW1lbXNldChpU0EsMCxzaXplb2YgaVNBKTsKCQltZW1zZXQoTENQLDAsc2l6ZW9mIExDUCk7CgkJbWVtc2V0KHRlbXAsMCxzaXplb2YgdGVtcCk7Cgl9Cn0g