n=int(eval(input()))

#n,p=map(int,input().split())

#hl=list(map(int,input().split()))

#l=[list(map(int,input().split())) for i in range(n)]

#素因数分解した結果を2次元配列にして返す



dic={}

ans=0

for i in range(n):

    s=list(eval(input()))

    s.sort()

    st="".join(s)

    v=dic.get(st,0)

    ans+=v

    dic[st]=v+1

print(ans)

n=int(eval(input()))

#n,m=map(int,input().split())

#t=int(input())

#pl=list(map(int,input().split()))

#l=[list(map(int,input().split())) for i in range(n)]

dic={}

res=0

for i in range(n):

    s=list(eval(input()))

    s="".join(sorted(s))

    count=dic.get(s,0)

    if count>0:

        res+=count

    dic[s]=count+1

print(res)

n = int(eval(input()))
# n,p=map(int,input().split())
# hl=list(map(int,input().split()))
# l=[list(map(int,input().split())) for i in range(n)]
# 素因数分解した結果を2次元配列にして返す
dic = {}
ans = 0
for i in range(n):
    s = list(eval(input()))
    s.sort()
    st = "".join(s)
    v = dic.get(st, 0)
    ans += v
    dic[st] = v + 1
print(ans)

n = int(eval(input()))
# n,m=map(int,input().split())
# t=int(input())
# pl=list(map(int,input().split()))
# l=[list(map(int,input().split())) for i in range(n)]
dic = {}
res = 0
for i in range(n):
    s = list(eval(input()))
    s = "".join(sorted(s))
    count = dic.get(s, 0)
    if count > 0:
        res += count
    dic[s] = count + 1
print(res)

-# n,p=map(int,input().split()) -# hl=list(map(int,input().split())) +# n,m=map(int,input().split()) +# t=int(input()) +# pl=list(map(int,input().split())) -# 素因数分解した結果を2次元配列にして返す -ans = 0 +res = 0 -    s.sort() -    st = "".join(s) -    v = dic.get(st, 0) -    ans += v -    dic[st] = v + 1 -print(ans) +    s = "".join(sorted(s)) +    count = dic.get(s, 0) +    if count > 0: +        res += count +    dic[s] = count + 1 +print(res)