import java.util.*;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    HashMap<String, Long> map = new HashMap<String, Long>();
    long ans = 0;
    for(int i = 0; i < n; i++) {
      String s = sc.next();
      int[] c = new int[26];
      for(int j = 0; j < 10; j++) {
        c[s.charAt(j) - 'a']++;
      }
      String str = "";
      for(int j = 0; j < 26; j++) {
        String ss = String.valueOf(c[j]);
        str += ss;
      }
      if(map.containsKey(str)) {
        ans += map.get(str); 
        map.put(str, map.get(str) + 1);
      } else {
        map.put(str, (long)1);
      }
    }
    System.out.println(ans);
  }
} import java.util.*; util.* java public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    HashMap<String, Long> map = new HashMap<String, Long>();
    long ans = 0;
    for(int i = 0; i < n; i++) {
      String s = sc.next();
      int[] c = new int[26];
      for(int j = 0; j < 10; j++) {
        c[s.charAt(j) - 'a']++;
      }
      String str = "";
      for(int j = 0; j < 26; j++) {
        String ss = String.valueOf(c[j]);
        str += ss;
      }
      if(map.containsKey(str)) {
        ans += map.get(str); 
        map.put(str, map.get(str) + 1);
      } else {
        map.put(str, (long)1);
      }
    }
    System.out.println(ans);
  }
} Main public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    HashMap<String, Long> map = new HashMap<String, Long>();
    long ans = 0;
    for(int i = 0; i < n; i++) {
      String s = sc.next();
      int[] c = new int[26];
      for(int j = 0; j < 10; j++) {
        c[s.charAt(j) - 'a']++;
      }
      String str = "";
      for(int j = 0; j < 26; j++) {
        String ss = String.valueOf(c[j]);
        str += ss;
      }
      if(map.containsKey(str)) {
        ans += map.get(str); 
        map.put(str, map.get(str) + 1);
      } else {
        map.put(str, (long)1);
      }
    }
    System.out.println(ans);
  } main {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    HashMap<String, Long> map = new HashMap<String, Long>();
    long ans = 0;
    for(int i = 0; i < n; i++) {
      String s = sc.next();
      int[] c = new int[26];
      for(int j = 0; j < 10; j++) {
        c[s.charAt(j) - 'a']++;
      }
      String str = "";
      for(int j = 0; j < 26; j++) {
        String ss = String.valueOf(c[j]);
        str += ss;
      }
      if(map.containsKey(str)) {
        ans += map.get(str); 
        map.put(str, map.get(str) + 1);
      } else {
        map.put(str, (long)1);
      }
    }
    System.out.println(ans);
  } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc HashMap<String, Long> map = new HashMap<String, Long>(); map new HashMap<String, Long>() long ans = 0; ans 0 for(int i = 0; i < n; i++) {
      String s = sc.next();
      int[] c = new int[26];
      for(int j = 0; j < 10; j++) {
        c[s.charAt(j) - 'a']++;
      }
      String str = "";
      for(int j = 0; j < 26; j++) {
        String ss = String.valueOf(c[j]);
        str += ss;
      }
      if(map.containsKey(str)) {
        ans += map.get(str); 
        map.put(str, map.get(str) + 1);
      } else {
        map.put(str, (long)1);
      }
    } int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
      String s = sc.next();
      int[] c = new int[26];
      for(int j = 0; j < 10; j++) {
        c[s.charAt(j) - 'a']++;
      }
      String str = "";
      for(int j = 0; j < 26; j++) {
        String ss = String.valueOf(c[j]);
        str += ss;
      }
      if(map.containsKey(str)) {
        ans += map.get(str); 
        map.put(str, map.get(str) + 1);
      } else {
        map.put(str, (long)1);
      }
    } {
      String s = sc.next();
      int[] c = new int[26];
      for(int j = 0; j < 10; j++) {
        c[s.charAt(j) - 'a']++;
      }
      String str = "";
      for(int j = 0; j < 26; j++) {
        String ss = String.valueOf(c[j]);
        str += ss;
      }
      if(map.containsKey(str)) {
        ans += map.get(str); 
        map.put(str, map.get(str) + 1);
      } else {
        map.put(str, (long)1);
      }
    } String s = sc.next(); s sc.next() sc.next sc int[] c = new int[26]; c new int[26] 26 for(int j = 0; j < 10; j++) {
        c[s.charAt(j) - 'a']++;
      } int j = 0; int j = 0; j 0 j < 10 j 10 j++ j++ j {
        c[s.charAt(j) - 'a']++;
      } {
        c[s.charAt(j) - 'a']++;
      } c[s.charAt(j) - 'a']++ c[s.charAt(j) - 'a'] c s.charAt(j) - 'a' s.charAt(j) s.charAt s j 'a' String str = ""; str "" for(int j = 0; j < 26; j++) {
        String ss = String.valueOf(c[j]);
        str += ss;
      } int j = 0; int j = 0; j 0 j < 26 j 26 j++ j++ j {
        String ss = String.valueOf(c[j]);
        str += ss;
      } {
        String ss = String.valueOf(c[j]);
        str += ss;
      } String ss = String.valueOf(c[j]); ss String.valueOf(c[j]) String.valueOf String c[j] c j str += ss str ss if(map.containsKey(str)) {
        ans += map.get(str); 
        map.put(str, map.get(str) + 1);
      } else {
        map.put(str, (long)1);
      } map.containsKey(str) map.containsKey map str {
        ans += map.get(str); 
        map.put(str, map.get(str) + 1);
      } ans += map.get(str) ans map.get(str) map.get map str map.put(str, map.get(str) + 1) map.put map str map.get(str) + 1 map.get(str) map.get map str 1 {
        map.put(str, (long)1);
      } map.put(str, (long)1) map.put map str (long)1 System.out.println(ans) System.out.println System.out System System.out ans String[] args args public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    HashMap<String, Long> map = new HashMap<String, Long>();
    long ans = 0;
    for(int i = 0; i < n; i++) {
      String s = sc.next();
      int[] c = new int[26];
      for(int j = 0; j < 10; j++) {
        c[s.charAt(j) - 'a']++;
      }
      String str = "";
      for(int j = 0; j < 26; j++) {
        String ss = String.valueOf(c[j]);
        str += ss;
      }
      if(map.containsKey(str)) {
        ans += map.get(str); 
        map.put(str, map.get(str) + 1);
      } else {
        map.put(str, (long)1);
      }
    }
    System.out.println(ans);
  }
} public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    HashMap<String, Long> map = new HashMap<String, Long>();
    long ans = 0;
    for(int i = 0; i < n; i++) {
      String s = sc.next();
      int[] c = new int[26];
      for(int j = 0; j < 10; j++) {
        c[s.charAt(j) - 'a']++;
      }
      String str = "";
      for(int j = 0; j < 26; j++) {
        String ss = String.valueOf(c[j]);
        str += ss;
      }
      if(map.containsKey(str)) {
        ans += map.get(str); 
        map.put(str, map.get(str) + 1);
      } else {
        map.put(str, (long)1);
      }
    }
    System.out.println(ans);
  }
} Main
import java.util.*;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    HashMap<String, Long> map = new HashMap<String, Long>();
    long ans = 0;
    for(int i = 0; i < n; i++) {
      String s = sc.next();
      int[] c = new int[26];
      for(int j = 0; j < 10; j++) {
        c[s.charAt(j) - 'a']++;
      }
      String str = "";
      for(int j = 0; j < 26; j++) {
        String ss = String.valueOf(c[j]);
        str += ss;
      }
      if(map.containsKey(str)) {
        ans += map.get(str); 
        map.put(str, map.get(str) + 1);
      } else {
        map.put(str, (long)1);
      }
    }
    System.out.println(ans);
  }
}