using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SherlockAndAnagrams
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = Convert.ToInt16(Console.ReadLine()); 
            for(int i = 0; i< n; i++)
            {
                Console.WriteLine(anagrammaticPair(Console.ReadLine().Trim())); 
            }
        }

        public static int anagrammaticPair(string s)
        {
            if (s == null || s.Length == 0) return 0;
            int n = s.Length;

            int count = 0; 
            for(int i=1; i<= n-1; i++)
            {
                count += aPair(s, i); 
            }

            return count; 
        }
        /*
         * get the anagrammatic pair of length m
         * 
         * substring S[i,j] with length m, at most n - m, n is length of string
         */
        private static int aPair(string s, int m)
        {
            Hashtable table = getTable( s, m);

            int count = 0; 
           foreach(string s1 in table.Keys)
           {
               IList<int> list = (IList<int>)table[s1];

               count += getPairs(list, m); 
           }
           return count; 
        }

        private static int getPairs(IList<int> list, int m)
        {
            int n = list.Count; 
            return n*(n-1)/2; 
        }

        private static Hashtable getTable(string s, int m)
        {
            Hashtable table = new Hashtable();

            int n = s.Length;
            for (int i = 0; i <= n - m; i++)
            {
                string tmp = s.Substring(i, m);

                //if (table.Contains(tmp))
                string key = ""; 
                if(tableContainsAnagram(table, tmp, ref key))
                {
                    IList<int> list = (IList<int>)table[key];
                    IList<int> newList = new List<int>(list);
                    newList.Add(i);
                    table[key] = newList;
                }
                else
                {
                    IList<int> list = new List<int>();
                    list.Add(i);
                    table.Add(tmp, list);
                }
            }

            return table; 
        }

        private static bool tableContainsAnagram(Hashtable table, string tmp, ref string key)
        {
            foreach(string s in table.Keys)
            {
                if (isAnagram(s, tmp))
                {
                    key = s;
                    return true; 
                }
            }
            return false; 
        }

        /*
         * Two strings are anagram, count of char should be same
         */
        private static bool isAnagram(string s1, string s2)
        {
            int[] cA = new int[26]; 
            foreach(char c in s1)
            {
                cA[c - 'a'] ++; 
            }

            foreach (char c in s2)
            {
                cA[c - 'a'] --;
            }

            foreach (int val in cA)
            {
                if (val != 0 )
                    return false; 
            }

            return true; 
        }
    }
}