class Affirmation:
    def __init__(self, phrase):
        """
        Création d'un objet Affirmation à partir d'une phrase (str).
        """
        self.contenu = phrase
        self.sorte = "" # vaudra "sujet, "pour" ou "contre"
                        # vaut "" avant ajour dans l'arbre
        self.arguments = []
        self.nb_likes = 0
        self.nb_dislikes = 0
        
    def soutenir(self, argument):
        """
        Ajoute l'Affirmation `argument`comme argument pour de l'Affirmation `self`.
        
        Précondition : l'Affirmation ne doit pas avoir déjà été utilisé, ni comme sujet, ni comme pour, ni comme contre, ce qu'on vérifie grâce à son attribut `sorte`.
        """
        assert argument.sorte == "", "L'argument a déjà été utilisé dans un arbre."
        self.arguments.append(argument)
        argument.sorte = "pour"
        
    def nb_contre(self):
        n = 0
        for argument in self.arguments:
            if argument.sorte == "contre":
                n += 1
        return n
    
    def mystere(self):
        """
        Retourne le nombre d'arguments "contre" maximal contre une seule Affirmation dans l'arbre d'arguments de l'Affirmation `self`.
        """
        m = self.nb_contre()
        for arg in self.arguments:
            candidat = arg.mystere()
            if candidat > m:
                m = candidat
        return m
    
    def evaluation(self):
        total = self.nb_likes - self.nb_dislikes
        for arg in self.arguments:
            if arg.sorte == "pour":
                total = total + arg.evaluation()
            if arg.sorte == "contre": # ou else:
                total = total - arg.evaluation()
        return total