import java.util.*;
import java.lang.*;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String[] s = new String[n];
		for (int i = 0; i < n; i++) {
			s[i] = sc.next();
			s[i] = sort(s[i]);
		}
		HashMap<String, Long> map = new HashMap<String, Long>();
		for (int i = 0; i < n; i++) {
			if (!map.containsKey(s[i])) {
				map.put(s[i], 1L);
			} else {
				map.put(s[i], map.get(s[i]) + 1);
			}
		}
		long ans = 0;
		for (String key : map.keySet()) {
			ans += map.get(key) * (map.get(key) - 1) / 2;
		}
		System.out.println(ans);
	}
	static String sort(String s) {
		for (int i = 0; i < 10; i++) {
			for (int j = i; j < 10; j++) {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			}
		}
		return s;
	}
} import java.util.*; util.* java import java.lang.*; lang.* java public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String[] s = new String[n];
		for (int i = 0; i < n; i++) {
			s[i] = sc.next();
			s[i] = sort(s[i]);
		}
		HashMap<String, Long> map = new HashMap<String, Long>();
		for (int i = 0; i < n; i++) {
			if (!map.containsKey(s[i])) {
				map.put(s[i], 1L);
			} else {
				map.put(s[i], map.get(s[i]) + 1);
			}
		}
		long ans = 0;
		for (String key : map.keySet()) {
			ans += map.get(key) * (map.get(key) - 1) / 2;
		}
		System.out.println(ans);
	}
	static String sort(String s) {
		for (int i = 0; i < 10; i++) {
			for (int j = i; j < 10; j++) {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			}
		}
		return s;
	}
} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String[] s = new String[n];
		for (int i = 0; i < n; i++) {
			s[i] = sc.next();
			s[i] = sort(s[i]);
		}
		HashMap<String, Long> map = new HashMap<String, Long>();
		for (int i = 0; i < n; i++) {
			if (!map.containsKey(s[i])) {
				map.put(s[i], 1L);
			} else {
				map.put(s[i], map.get(s[i]) + 1);
			}
		}
		long ans = 0;
		for (String key : map.keySet()) {
			ans += map.get(key) * (map.get(key) - 1) / 2;
		}
		System.out.println(ans);
	} main {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String[] s = new String[n];
		for (int i = 0; i < n; i++) {
			s[i] = sc.next();
			s[i] = sort(s[i]);
		}
		HashMap<String, Long> map = new HashMap<String, Long>();
		for (int i = 0; i < n; i++) {
			if (!map.containsKey(s[i])) {
				map.put(s[i], 1L);
			} else {
				map.put(s[i], map.get(s[i]) + 1);
			}
		}
		long ans = 0;
		for (String key : map.keySet()) {
			ans += map.get(key) * (map.get(key) - 1) / 2;
		}
		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 String[] s = new String[n]; s new String[n] n for (int i = 0; i < n; i++) {
			s[i] = sc.next();
			s[i] = sort(s[i]);
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			s[i] = sc.next();
			s[i] = sort(s[i]);
		} {
			s[i] = sc.next();
			s[i] = sort(s[i]);
		} s[i] = sc.next() s[i] s i sc.next() sc.next sc s[i] = sort(s[i]) s[i] s i sort(s[i]) sort s[i] s i HashMap<String, Long> map = new HashMap<String, Long>(); map new HashMap<String, Long>() for (int i = 0; i < n; i++) {
			if (!map.containsKey(s[i])) {
				map.put(s[i], 1L);
			} else {
				map.put(s[i], map.get(s[i]) + 1);
			}
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			if (!map.containsKey(s[i])) {
				map.put(s[i], 1L);
			} else {
				map.put(s[i], map.get(s[i]) + 1);
			}
		} {
			if (!map.containsKey(s[i])) {
				map.put(s[i], 1L);
			} else {
				map.put(s[i], map.get(s[i]) + 1);
			}
		} if (!map.containsKey(s[i])) {
				map.put(s[i], 1L);
			} else {
				map.put(s[i], map.get(s[i]) + 1);
			} !map.containsKey(s[i]) map.containsKey(s[i]) map.containsKey map s[i] s i {
				map.put(s[i], 1L);
			} map.put(s[i], 1L) map.put map s[i] s i 1L {
				map.put(s[i], map.get(s[i]) + 1);
			} map.put(s[i], map.get(s[i]) + 1) map.put map s[i] s i map.get(s[i]) + 1 map.get(s[i]) map.get map s[i] s i 1 long ans = 0; ans 0 for (String key : map.keySet()) {
			ans += map.get(key) * (map.get(key) - 1) / 2;
		} String key map.keySet() map.keySet map {
			ans += map.get(key) * (map.get(key) - 1) / 2;
		} {
			ans += map.get(key) * (map.get(key) - 1) / 2;
		} ans += map.get(key) * (map.get(key) - 1) / 2 ans map.get(key) * (map.get(key) - 1) / 2 map.get(key) * (map.get(key) - 1) map.get(key) map.get map key (map.get(key) - 1) map.get(key) map.get map key 1 2 System.out.println(ans) System.out.println System.out System System.out ans String[] args args static String sort(String s) {
		for (int i = 0; i < 10; i++) {
			for (int j = i; j < 10; j++) {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			}
		}
		return s;
	} sort {
		for (int i = 0; i < 10; i++) {
			for (int j = i; j < 10; j++) {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			}
		}
		return s;
	} for (int i = 0; i < 10; i++) {
			for (int j = i; j < 10; j++) {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			}
		} int i = 0; int i = 0; i 0 i < 10 i 10 i++ i++ i {
			for (int j = i; j < 10; j++) {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			}
		} {
			for (int j = i; j < 10; j++) {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			}
		} for (int j = i; j < 10; j++) {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			} int j = i; int j = i; j i j < 10 j 10 j++ j++ j {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			} {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			} char a = s.charAt(i); a s.charAt(i) s.charAt s i char b = s.charAt(j); b s.charAt(j) s.charAt s j if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				} a > b a b {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				} s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1) s s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1) a s.substring(i + 1, j) s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1) s.substring(0, i) s.substring s 0 i b s.substring(i + 1, j) s.substring s i + 1 i 1 j a s.substring(j + 1) s.substring s j + 1 j 1 return s; s String s s public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String[] s = new String[n];
		for (int i = 0; i < n; i++) {
			s[i] = sc.next();
			s[i] = sort(s[i]);
		}
		HashMap<String, Long> map = new HashMap<String, Long>();
		for (int i = 0; i < n; i++) {
			if (!map.containsKey(s[i])) {
				map.put(s[i], 1L);
			} else {
				map.put(s[i], map.get(s[i]) + 1);
			}
		}
		long ans = 0;
		for (String key : map.keySet()) {
			ans += map.get(key) * (map.get(key) - 1) / 2;
		}
		System.out.println(ans);
	}
	static String sort(String s) {
		for (int i = 0; i < 10; i++) {
			for (int j = i; j < 10; j++) {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			}
		}
		return s;
	}
} public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String[] s = new String[n];
		for (int i = 0; i < n; i++) {
			s[i] = sc.next();
			s[i] = sort(s[i]);
		}
		HashMap<String, Long> map = new HashMap<String, Long>();
		for (int i = 0; i < n; i++) {
			if (!map.containsKey(s[i])) {
				map.put(s[i], 1L);
			} else {
				map.put(s[i], map.get(s[i]) + 1);
			}
		}
		long ans = 0;
		for (String key : map.keySet()) {
			ans += map.get(key) * (map.get(key) - 1) / 2;
		}
		System.out.println(ans);
	}
	static String sort(String s) {
		for (int i = 0; i < 10; i++) {
			for (int j = i; j < 10; j++) {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			}
		}
		return s;
	}
} Main
import java.util.*;
import java.lang.*;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String[] s = new String[n];
		for (int i = 0; i < n; i++) {
			s[i] = sc.next();
			s[i] = sort(s[i]);
		}
		HashMap<String, Long> map = new HashMap<String, Long>();
		for (int i = 0; i < n; i++) {
			if (!map.containsKey(s[i])) {
				map.put(s[i], 1L);
			} else {
				map.put(s[i], map.get(s[i]) + 1);
			}
		}
		long ans = 0;
		for (String key : map.keySet()) {
			ans += map.get(key) * (map.get(key) - 1) / 2;
		}
		System.out.println(ans);
	}
	static String sort(String s) {
		for (int i = 0; i < 10; i++) {
			for (int j = i; j < 10; j++) {
				char a = s.charAt(i);
				char b = s.charAt(j);
				if (a > b) {
					s = s.substring(0, i) + b + s.substring(i + 1, j) + a + s.substring(j + 1);
				}
			}
		}
		return s;
	}
}