class Car:
    def __init__(self, rep, mark):
        self.rep = rep
        self.mark = mark

    def __str__(self):
        return "REP: %3d" % self.rep + "\tMARK:" + self.mark


class Node:
    def __init__(self, car):
        self.data = car
        self.next = None


class PriorityQueue:
    def __init__(self):
        self.head = None

    def pushNode(self, car):
        new = Node(car)
        ref = self.head
        if ref is None:
            self.head = new
        elif car.rep > ref.data.rep:
            new.next = self.head
            self.head = new
        else:
            while ref.next is not None and ref.next.data.rep > car.rep:
                ref = ref.next
            new.next = ref.next
            ref.next = new

    def popNode(self):
        ret = self.head
        if ret is not None:
            self.head = ret.next
        return ret

    def fromArray(self, array):
        for item in array:
            self.pushNode(item)

    def printQueue(self):
        i = 1
        ref = self.head
        while ref is not None:
            print("Car %d [%s]" % (i, ref.data))
            ref = ref.next
            i += 1


car1 = Car(10, "Porsche")
car2 = Car(5, "Audi")
car3 = Car(4, "BMW")
car4 = Car(2, "SkodaAuto")
car5 = Car(99, "Ferrari")
array = [car1, car2, car3, car4, car5]

q = PriorityQueue()
q.fromArray(array)
q.printQueue()