n = int(eval(input()))

 

words = {}

anagrams = 0

 

for i in range(n):

    word = "".join(sorted(eval(input())))

    if word not in words:

        words[word] = 1

    else:

        anagrams += words[word]

        words[word] += 1

 

print(anagrams)
# ソートした状態で文字を読み込んで、アナグラムの文字と出てくる回数を取得する

# あるアナグラム文字がn回出てくるならば、ペアの選び方はnC2で、n*(n-1)/2

# 全てのアナグラム文字に関して足し合わせ

import collections



n = int(eval(input()))

# ソートして文字読み込み

s_sorted = [''.join(sorted(eval(input()))) for i in range(n)]



# アナグラム文字列と出現回数を取得

anagram_list = collections.Counter(s_sorted)



count = 0



# 出現回数のリストからペアの選び方を計算して、足し合わせ

for i in list(anagram_list.values()):

    count += i*(i-1)//2



print(count)
n = int(eval(input()))
words = {}
anagrams = 0
for i in range(n):
    word = "".join(sorted(eval(input())))
    if word not in words:
        words[word] = 1
    else:
        anagrams += words[word]
        words[word] += 1
print(anagrams)

# ソートした状態で文字を読み込んで、アナグラムの文字と出てくる回数を取得する
# あるアナグラム文字がn回出てくるならば、ペアの選び方はnC2で、n*(n-1)/2
# 全てのアナグラム文字に関して足し合わせ
import collections

n = int(eval(input()))
# ソートして文字読み込み
s_sorted = ["".join(sorted(eval(input()))) for i in range(n)]
# アナグラム文字列と出現回数を取得
anagram_list = collections.Counter(s_sorted)
count = 0
# 出現回数のリストからペアの選び方を計算して、足し合わせ
for i in list(anagram_list.values()):
    count += i * (i - 1) // 2
print(count)

+# ソートした状態で文字を読み込んで、アナグラムの文字と出てくる回数を取得する +# あるアナグラム文字がn回出てくるならば、ペアの選び方はnC2で、n*(n-1)/2 +# 全てのアナグラム文字に関して足し合わせ +import collections + -words = {} -anagrams = 0 -for i in range(n): -    word = "".join(sorted(eval(input()))) -    if word not in words: -        words[word] = 1 -    else: -        anagrams += words[word] -        words[word] += 1 -print(anagrams) +# ソートして文字読み込み +s_sorted = ["".join(sorted(eval(input()))) for i in range(n)] +# アナグラム文字列と出現回数を取得 +anagram_list = collections.Counter(s_sorted) +count = 0 +# 出現回数のリストからペアの選び方を計算して、足し合わせ +for i in list(anagram_list.values()): +    count += i * (i - 1) // 2 +print(count)