import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		long ans = 0;//答え
		int n = sc.nextInt();
		Map<String, Integer> s = new HashMap<String,Integer>();//文字列と個数のマップ
		String sn;//読み込んだ文字列
 		String si;//並べ替えた文字列
		char sm[] = new char[10];//並べ替え用
		
		
		for(int i = 0;i < n;i++) {
			sn = sc.next();
			//読み込んだ文字列の並べ替え
			sm = sn.toCharArray();
			Arrays.sort(sm);
			si = new String(sm);
			
			if(s.containsKey(si)) {
				//同じものがあったら
				int m = s.get(si);
				ans += m+1;
				s.put(si, m + 1);
				
			}else {
				//なかったら
				s.put(si, 0);
			}
		}
		System.out.println(ans);
	}
} import java.util.*; util.* java public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		long ans = 0;//答え
		int n = sc.nextInt();
		Map<String, Integer> s = new HashMap<String,Integer>();//文字列と個数のマップ
		String sn;//読み込んだ文字列
 		String si;//並べ替えた文字列
		char sm[] = new char[10];//並べ替え用
		
		
		for(int i = 0;i < n;i++) {
			sn = sc.next();
			//読み込んだ文字列の並べ替え
			sm = sn.toCharArray();
			Arrays.sort(sm);
			si = new String(sm);
			
			if(s.containsKey(si)) {
				//同じものがあったら
				int m = s.get(si);
				ans += m+1;
				s.put(si, m + 1);
				
			}else {
				//なかったら
				s.put(si, 0);
			}
		}
		System.out.println(ans);
	}
} Main public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		long ans = 0;//答え
		int n = sc.nextInt();
		Map<String, Integer> s = new HashMap<String,Integer>();//文字列と個数のマップ
		String sn;//読み込んだ文字列
 		String si;//並べ替えた文字列
		char sm[] = new char[10];//並べ替え用
		
		
		for(int i = 0;i < n;i++) {
			sn = sc.next();
			//読み込んだ文字列の並べ替え
			sm = sn.toCharArray();
			Arrays.sort(sm);
			si = new String(sm);
			
			if(s.containsKey(si)) {
				//同じものがあったら
				int m = s.get(si);
				ans += m+1;
				s.put(si, m + 1);
				
			}else {
				//なかったら
				s.put(si, 0);
			}
		}
		System.out.println(ans);
	} main {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		long ans = 0;//答え
		int n = sc.nextInt();
		Map<String, Integer> s = new HashMap<String,Integer>();//文字列と個数のマップ
		String sn;//読み込んだ文字列
 		String si;//並べ替えた文字列
		char sm[] = new char[10];//並べ替え用
		
		
		for(int i = 0;i < n;i++) {
			sn = sc.next();
			//読み込んだ文字列の並べ替え
			sm = sn.toCharArray();
			Arrays.sort(sm);
			si = new String(sm);
			
			if(s.containsKey(si)) {
				//同じものがあったら
				int m = s.get(si);
				ans += m+1;
				s.put(si, m + 1);
				
			}else {
				//なかったら
				s.put(si, 0);
			}
		}
		System.out.println(ans);
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) long ans = 0; ans 0 int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc Map<String, Integer> s = new HashMap<String,Integer>(); s new HashMap<String,Integer>() String sn; sn String si; si char sm[] = new char[10]; sm new char[10] 10 for(int i = 0;i < n;i++) {
			sn = sc.next();
			//読み込んだ文字列の並べ替え
			sm = sn.toCharArray();
			Arrays.sort(sm);
			si = new String(sm);
			
			if(s.containsKey(si)) {
				//同じものがあったら
				int m = s.get(si);
				ans += m+1;
				s.put(si, m + 1);
				
			}else {
				//なかったら
				s.put(si, 0);
			}
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			sn = sc.next();
			//読み込んだ文字列の並べ替え
			sm = sn.toCharArray();
			Arrays.sort(sm);
			si = new String(sm);
			
			if(s.containsKey(si)) {
				//同じものがあったら
				int m = s.get(si);
				ans += m+1;
				s.put(si, m + 1);
				
			}else {
				//なかったら
				s.put(si, 0);
			}
		} {
			sn = sc.next();
			//読み込んだ文字列の並べ替え
			sm = sn.toCharArray();
			Arrays.sort(sm);
			si = new String(sm);
			
			if(s.containsKey(si)) {
				//同じものがあったら
				int m = s.get(si);
				ans += m+1;
				s.put(si, m + 1);
				
			}else {
				//なかったら
				s.put(si, 0);
			}
		} sn = sc.next() sn sc.next() sc.next sc sm = sn.toCharArray() sm sn.toCharArray() sn.toCharArray sn Arrays.sort(sm) Arrays.sort Arrays sm si = new String(sm) si new String(sm) if(s.containsKey(si)) {
				//同じものがあったら
				int m = s.get(si);
				ans += m+1;
				s.put(si, m + 1);
				
			}else {
				//なかったら
				s.put(si, 0);
			} s.containsKey(si) s.containsKey s si {
				//同じものがあったら
				int m = s.get(si);
				ans += m+1;
				s.put(si, m + 1);
				
			} int m = s.get(si); m s.get(si) s.get s si ans += m+1 ans m+1 m 1 s.put(si, m + 1) s.put s si m + 1 m 1 {
				//なかったら
				s.put(si, 0);
			} s.put(si, 0) s.put s si 0 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) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		long ans = 0;//答え
		int n = sc.nextInt();
		Map<String, Integer> s = new HashMap<String,Integer>();//文字列と個数のマップ
		String sn;//読み込んだ文字列
 		String si;//並べ替えた文字列
		char sm[] = new char[10];//並べ替え用
		
		
		for(int i = 0;i < n;i++) {
			sn = sc.next();
			//読み込んだ文字列の並べ替え
			sm = sn.toCharArray();
			Arrays.sort(sm);
			si = new String(sm);
			
			if(s.containsKey(si)) {
				//同じものがあったら
				int m = s.get(si);
				ans += m+1;
				s.put(si, m + 1);
				
			}else {
				//なかったら
				s.put(si, 0);
			}
		}
		System.out.println(ans);
	}
} public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		long ans = 0;//答え
		int n = sc.nextInt();
		Map<String, Integer> s = new HashMap<String,Integer>();//文字列と個数のマップ
		String sn;//読み込んだ文字列
 		String si;//並べ替えた文字列
		char sm[] = new char[10];//並べ替え用
		
		
		for(int i = 0;i < n;i++) {
			sn = sc.next();
			//読み込んだ文字列の並べ替え
			sm = sn.toCharArray();
			Arrays.sort(sm);
			si = new String(sm);
			
			if(s.containsKey(si)) {
				//同じものがあったら
				int m = s.get(si);
				ans += m+1;
				s.put(si, m + 1);
				
			}else {
				//なかったら
				s.put(si, 0);
			}
		}
		System.out.println(ans);
	}
} Main
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		long ans = 0;//答え
		int n = sc.nextInt();
		Map<String, Integer> s = new HashMap<String,Integer>();//文字列と個数のマップ
		String sn;//読み込んだ文字列
 		String si;//並べ替えた文字列
		char sm[] = new char[10];//並べ替え用
		
		
		for(int i = 0;i < n;i++) {
			sn = sc.next();
			//読み込んだ文字列の並べ替え
			sm = sn.toCharArray();
			Arrays.sort(sm);
			si = new String(sm);
			
			if(s.containsKey(si)) {
				//同じものがあったら
				int m = s.get(si);
				ans += m+1;
				s.put(si, m + 1);
				
			}else {
				//なかったら
				s.put(si, 0);
			}
		}
		System.out.println(ans);
	}
}
