n=int(input("nb de disques ?")) #nb de disques
L=[[k for k in range(n,0,-1)],[],[]]
# contient les listes représentant les piquets 1, 2, 3.

def afficher(L):
    """Affichage en fonction du contenu des listes dans L"""
    print('*****')
    for k in (0,1,2):
        ligne="*["+str(k+1)+"]: "
        for j in L[k]:
            ligne+=str(j)
        print(ligne)
    print('*****\n')

afficher(L)

def hanoi_graph(n):
    """Tour de Hanoi avec rendu graphique"""
    global compt
    compt=0 # compteur de coups

    def hanoi(nb,pos_init,pos_fin):
        """Tour de Hanoi récursif avec affichage"""
        global compt
        if nb==1:
            # On déplace effectivement la pièce
            L[pos_fin-1].append(L[pos_init-1].pop())
            # On l'affiche
            print(compt,": Déplacer de",pos_init,"vers",pos_fin)
            afficher(L)
            # On incrémente le compteur
            compt+=1
        else:
            # Position intermédiaire
            pos_inter=6-pos_init-pos_fin
            # Premier appel récursif
            hanoi(nb-1,pos_init,pos_inter)
            #déplacement du n ieme disque
            hanoi(1,pos_init,pos_fin)
            # Deuxième appel récursif
            hanoi(nb-1,pos_inter,pos_fin)

    #on appelle la fonction Hanoi à l'intérieur de la fonction hanoi_graph
    hanoi(n,1,3)
    print("C'est gagné en",compt,"coups !")


hanoi_graph(n)