class Tas():
    def __init__(self):
        self.__values = []

    def push(self, value):
        self.__values.append(value)

    def peek(self, i): # pop sans suppression
        return self.__values[i], i
        
    def fg(self, i):
        left_i = 2 * i + 1
        if left_i > len(self.__values):
            return None, left_i
        else:
            return self.__values[left_i], left_i

    def fd(self, i):
        droite_i = 2 * i + 2
        if droite_i > len(self.__values):
            return None, droite_i
        else:
            return self.__values[droite_i], droite_i

    def parent(self, i):
        return self.__values[(i - 1) // 2]

    def afficher(self):
        return ' '.join(str(v) for v in self.__values)

    def inserer(self, value):
        self.push(value)
        i = len(self.__values) - 1
        while (i + 1) // 2 > 0:
            if self.__values[i] < self.parent(i):
                tmp = self.__values[i // 2]
                self.__values[i // 2] = self.__values[i]
                self.__values[i] = tmp
            i = i // 2
        
    def supprimer(self, i):

        v = self.__values.pop(i)
        max_i = i
        n = len(self.__values) - 1

        while self.__values[i] > self.fg(i)[0] or self.__values[i] > self.fd(i)[0]:

            max = self.__values[i]
            
            if i < n and max > self.fg(i)[0]:
                max_i = 2 * i + 1

            if i < n and max > self.fd(i)[0]:
                max_i = 2 * i + 2

            if max_i != i: 
                self.__values[i], self.__values[max_i] = self.__values[max_i], self.__values[i]

            i = max_i

        return v