class TaBiDir:
    """tableau bidirectionnel"""
    def __init__(self, g, d):
        """construit un tableau bidirectionnel, avec les éléments de `g`
        aux indices négatifs et les éléments de `d` aux indices positifs
        ou nul"""
        self.gauche = g[::-1]
        self.droite = d[:]

    def __len__(self):
        return len(self.gauche) + len(self.droite)

    def imin(self):
        """indice minimal"""
        return - len(self.gauche)

    def imax(self):
        """indice maximal"""
        return len(self.droite) - 1

    def __getitem__(self, i):
        if i >= 0:
            return self.droite[i]
        else:
            return self.gauche[-i-1]

    def __setitem__(self, i, v):
        if i >= 0:
            self.droite[i] = v
        else:
            self.gauche[-i-1] = v

    def append(self, v):
        """ajoute un nouvel élément à droite"""
        self.droite.append(v)

    def prepend(self, v):
        """ajoute un nouvel élément à gauche"""
        self.gauche.append(v)

    def __str__(self):
        return str(self.gauche[::-1])[0:-1] + ', ' \
            + str(self.droite)[1:]
