def mystere(graphe, s, n, ouverts, fermes, resultat):
    """ Paramètres :
        graphe un graphe représenté par une matrice d'adjacence
        s l'indice d'un sommet du graphe
        n le nombre de sommets du graphe
        ouverts une liste de booléens permettant de savoir
            si le traitement d'un sommet a été commencé
        fermes une liste de booléens permettant de savoir
            si le traitement d'un sommet a été terminé
        Retour : False s'il y a eu un "problème", True sinon.
        Le paramètre resultat sera modifié ultérieurement.
    """
    if ouverts[s]:
        return False
    if not fermes[s]:
        ouverts[s] = True
        for i in range(n):
            if graphe[s][i] == 1:
                val = mystere(graphe, i, n, ouverts, fermes, resultat)
            if not val:
                return False
            ouverts[s] = False
            fermes[s] = True
            # ...
    return True