Same Method, Different super() Target

class A:
    def greet(self):
        return "A"

class B(A):
    def greet(self):
        return "B->" + super().greet()

class C(A):
    def greet(self):
        return "C->" + super().greet()

class D(B, C):
    def greet(self):
        return "D->" + super().greet()

print(B().greet())
print(D().greet())

What do the two print calls output, in order?

A

B->A then a TypeError when calling D().greet(), because C shares a common ancestor with B and super() cannot resolve through an unrelated sibling

B

B->A then D->B->C->A

C

B->A then D->B->A (super() inside B.greet always calls A.greet, since B is A's direct subclass)

D

B->A then D->C->B->A (D(B, C) gives C priority over B in the MRO)