Questão dicionários

Preciso de ajuda em uma questão que quer saber quantos amigos cada aluno de uma escola tem. Primeiro, é dado como input dois numeros n e p, em que n é a quantidade de alunos e p é a quantidade de pares que vão ser colocados, depois os nomes dos alunos e depois pares de dois aluno a e b em que a é amigo de b e b é amigo de a. Porém, se a é amigo de b e b é amigo de c, então a é amigo de c. Depois, eu preciso imprimir quantos amigos cada aluno tem. Eu estou com difilcudade nessa parte de adicionar amigos de amigos, ou seja, essa parte em que se a é amigo de b e b é amigo de c, então a é amigo de c. Sempre que eu tento resolver essa parte eu acabo colocando três for encadeados e o código demora muito tempo a processar. Esse foi o meu código até agora:

n,p = map(int,input().split())
alunos = input().split()
dic = {}
for aluno in alunos:
    dic[aluno] = []
for i in range(p):
    a,b = input().split()
if b not in dic[a]:
    dic[a].append(b)
    dic[b].append(a)
for aluno,amigos in sorted(dic.items()):
    print(f'{aluno} possui {len(amigos)} amigos')