"""
    Résolution du cryptarithme KILO + KILO = TONNE
"""
def tous_differents_v1(d):
    return len(set(d.values())) == len(d)

def tous_differents_v2(d):
    """
        Vérifie que les valeurs du dictionnaire d sont toutes différentes
    """
    for k1, v1 in d.items():
        for k2, v2 in d.items():
            # si les variables sont différentes et que les valeurs sont les mêmes
            if k1 != k2 and v1 == v2:
                # retourner False
                return False
    # retourner True si toutes les valeurs sont différentes
    return True


def formule_valide(d):
    """
        Vérifie si la formule KILO + KILO = TONNE est valide
    """
    K = d['K']
    I = d['I']
    L = d['L']
    O = d['O']
    N = d['N']
    E = d['E']
    T = d['T']

    kilo = K*1000 + I*100 + L*10 + O
    tonne = T*10000 + O*1000 + N*100 + N*10 + E

    return 2 * kilo == tonne

def recherche_solutions(d,lettres):
    """
        Recherche toutes les solutions pour le cryptarithme KILO + KILO = TONNE
        d est un dictionnaire qui contient les valeurs des variables
        lettres est une liste (ou un ensemble) de variables
    """
    if len(lettres) == 0:
        # si on a assigné une valeur à toutes les variables
        if tous_differents_v1(d) and formule_valide(d):
            # si les valeurs sont toutes différentes et que la formule est valide
            # on a trouvé une solution
            print(d)
    else:
        # sinon on continue la recherche
        # on choisit une variable
        k = lettres.pop()

        # on essaie toutes les valeurs possibles pour cette
        # variable
        for i in range(10):
            # on assigne la valeur i à la variable k
            d[k] = i
            # on continue la recherche
            recherche_solutions(d, lettres)

        # on remet la variable dans la liste
        lettres.append(k)

def main():
    """
        Fonction principale
    """
    # chaine de caractères à partir de laquelle on extrait les variables
    chn = "KILO+KILO=TONNE"

    # ensemble des variables
    ens = { car for car in chn if car.isalpha() }

    # dictionnaire qui contiendra les valeurs des variables
    dico = { k: 0 for k in ens }

    # lancer la recherche des solutions
    recherche_solutions(dico, list(ens))

if __name__ == "__main__":
    main()

