def equilibreGloutonEtendu(words, textEquilibre, n):
    if(words == []):
        return textEquilibre
    else:
        if(textEquilibre == []):
            textEquilibre = [[words[0][:]]]
            words.pop(0)
            return equilibreGloutonEtendu(words, textEquilibre, n)
        
        textWithTransfer = textEquilibre[:]
        textWithTransfer.append([words[0][:]])
        #print "WT", textWithTransfer
        
        if(possibleString(textEquilibre[-1] + [words[0]], n)):
            lastString = textEquilibre[-1][:] + [words[0][:]]
            textWoTransfer = textEquilibre[:]
            textWoTransfer.pop(-1)
            textWoTransfer.append(lastString)
            words.pop(0)
            #print "WoT", textWoTransfer
            
            #maxMinWoT = etendue(textWoTransfer)
            distanceWoT = etendue(textWoTransfer)#maxMinWoT[0]-maxMinWoT[1]
            #maxMinWT = etendue(textWithTransfer)
            distanceWT = etendue(textWithTransfer)#maxMinWT[0]-maxMinWT[1]
            if(distanceWoT < distanceWT):
                return equilibreGloutonEtendu(words, textWoTransfer, n)
            else:
                return equilibreGloutonEtendu(words, textWithTransfer, n)
        else:
            words.pop(0)
            return equilibreGloutonEtendu(words, textWithTransfer, n)
def fusionTextesEtendue(text1, text2, stringLength):
    #print "Try to fusion"
    fusionedString = text1[-1][:] + text2[0][:]
    if(possibleString(fusionedString, stringLength)):
        #print "Fusioned string: ", fusionedString
        #print "is possible"
        fusionedLength = longueur(fusionedString)
        #print "with length", fusionedLength
        if(len(text1)>0):
            text1.pop()
        if(len(text2)>0):
            text2.pop(0)
        
        resultText = text1 + [fusionedString] + text2
        #print "minmax for fusioned text:", etendue(resultText)
        
        
        return True, etendue(resultText), resultText
    else:
        #print "Fusion impossible"
        return False,[0,0],[]
def equilibreEtendu(texte, n):
    textEq = [[texte[0][:]]]
    texte.pop(0)
    result = equilibreGloutonEtendu(texte, textEq, n)
    #print result
    return result, etendue(result)