def equilibreEtendue(texte, n):  
    global MEMO
    MEMO=Memo()
    for i in range (len(texte)-1,-1,-1):    #Pour i allant de l'indice du dernier mot au premier
        if longueur(texte[i:])<=n:
            res=([texte[i:]],0,'infini',0)
        else:
            curr=0
            deseq='infini'
            longtext=longueur(texte[i:i+1])
            while longtext<=n:
                suite=MEMO.get_etendue(i+curr+1)
                c=suite[2]
                l=suite[3]
                if min(longtext,c)==longtext:
                    c=longtext
                if min(longtext,l)==l:
                    l=longtext                
                deseq_bis=l-c
                if min(deseq,deseq_bis)==deseq_bis: #on notera que la fonction min a été surchargée pour
                                                    #considérer 'infini' comme l'infini
                    deseq=deseq_bis
                    res=([texte[i:i+curr+1]]+suite[0],deseq,c,l)
                curr+=1
                longtext=longueur(texte[i:i+curr+1])
        MEMO.add_etendue(i,res[0],res[1],res[2],res[3])
    return res
def equilibreVar(texte, n):
    global MEMO
    MEMO=Memo()
    for i in range (len(texte)-1,-1,-1):    #Pour i allant de l'indice du dernier mot au premier
        if longueur(texte[i:])<=n:
            res=([texte[i:]],0)        
        else:
            curr=0
            deseq='infini'
            while longueur(texte[i:i+curr+1])<=n:
                suite=MEMO.get(i+curr+1)
                deseq_bis=variance([texte[i:i+curr+1]]+suite[0])
                if min(deseq,deseq_bis)==deseq_bis: #on notera que la fonction min a été surchargée pour
                                                    #considérer 'infini' comme l'infini
                    deseq=deseq_bis
                    res=([texte[i:i+curr+1]]+suite[0],deseq)
                curr+=1
        MEMO.add(i,res[0],res[1])
    return res