using System;
using System.Collections;
using static System.Console;
using static System.Math;
 
public class Hello{
    public static void Main(){
        string alpha = "abcedfghijklmnopqrstuvwxyz";
        int num = rint();
        string[,] list = new string[208,100010];
        int[,] listnum = new int[208,100010];
        long total = 0;
        for(int i=0;i<num;i++){
            string read = rstr();
            char[] chan = new char[10];
            for(int j=0;j<10;j++){
                chan[j] = read[j];
            }
            Array.Sort(chan);
            string change = "";
            for(int j=0;j<10;j++){
                change += chan[j];
            }
            int fir = alpha.IndexOf(chan[0]) +alpha.IndexOf(chan[1]) +alpha.IndexOf(chan[2])+alpha.IndexOf(chan[4])+alpha.IndexOf(chan[5])+alpha.IndexOf(chan[7])+ alpha.IndexOf(chan[8])+ alpha.IndexOf(chan[9]);
            for(int j=0;j<100010;j++){
                if(list[fir,j] == null){
                    list[fir,j] = change;
                    total += listnum[fir,j];
                    listnum[fir,j]++;
                    break;
                }else if(list[fir,j] == change){
                    total += listnum[fir,j];
                    listnum[fir,j]++;
                    break;
                }
            }
        }
        WriteLine(total);
    
    
    
    
    }
    //各種読取
    static string rstr(){
        return ReadLine();
    }
    static int rint(){
        return int.Parse(ReadLine());
    }
    static long rlong(){
        return long.Parse(ReadLine());
    }
    static string[] stra(){
        return ReadLine().Split(' ');
    }
    static int[] inta(){
        string[] read_str_array = ReadLine().Split(' ');
        int[] return_int_array = new int[read_str_array.Length];
        for(int countup_i=0;countup_i<read_str_array.Length;countup_i++){
            return_int_array[countup_i] = int.Parse(read_str_array[countup_i]);
        }
        return return_int_array;
    }
    static int[,] inta2(int num_array,int in_array){
        int[,] int_array2 = new int[num_array,in_array];
        for(int i=0;i<num_array;i++){
            int[] temp_array = inta();
            for(int j=0;j<in_array;j++){
                int_array2[i,j] = temp_array[j];
            }
        }
        return int_array2;
    }
    static long[] longa(){
        string[] read_str_array = ReadLine().Split(' ');
        long[] return_long_array = new long[read_str_array.Length];
        for(long countup_i=0;countup_i<read_str_array.Length;countup_i++){
            return_long_array[countup_i] = long.Parse(read_str_array[countup_i]);
        }
        return return_long_array;
    }
    static double[] doublea(){
        string[] read_str_array = ReadLine().Split(' ');
        double[] return_double_array = new double[read_str_array.Length];
        for(long countup_i=0;countup_i<read_str_array.Length;countup_i++){
            return_double_array[countup_i] = long.Parse(read_str_array[countup_i]);
        }
        return return_double_array;
    }
    // A/B小数点以下切上
    static int divideup(int divided,int divid){
        int temp_divide = divided/divid;
        if(divided % divid > 0){
            temp_divide++;
        }
        return temp_divide;
    }
}


Measured memory_bytes: 202240