# Les anagrammes

def dictionnaire_ordonne():
    # on lit le fichier et on range les mots alphabétiquement selon leur longueur 
    fichier = open("dico.txt", "r")
    dict_ord = {}
    for longueur in range(25):
        dict_ord[longueur+1] = []
    mot = fichier.readline()
    while mot != '':
        mot = mot.strip('\n')
        if '-' in mot:
            mot = mot.replace('-','')
        dict_ord[len(mot)].append(mot)
        mot = fichier.readline()
    fichier.close()
    return dict_ord

def lettres_multiples_ok(mot,tirage):
    # teste si chaque lettre figure suffisamment de fois dans le tirage
    for lettre in mot:
        if lettre in tirage:
            tirage.remove(lettre)
        else:
            return False
    return True

def trouver_plus_long_mot(dico, tirage):
    longueur_mot = len(tirage)
    solution= []
    set_tirage = set(tirage)
    for mot in dico[longueur_mot]:
        if set(mot).issubset(set_tirage):
            # les lettres du mot sont un sous-ensemble du tirage
            tirage_test = list(tirage)
            if lettres_multiples_ok(mot,tirage_test) and mot!=tirage:
                solution.append(mot)
    return solution


dico = dictionnaire_ordonne()
long_mot = int(input("Longueur des mots : "))
print('Anagrammes de',long_mot,'lettres')
for i in dico[long_mot]:
    solution = trouver_plus_long_mot(dico, i)
    if solution!=[]:
        print(i,":",solution)	
