Solution (source code)

= Solution

\b[Permitted; returns `"BC"`.] Through <static type> `B`, both `show(A)` and `show(B)` accept an argument of type `C`; <method overloading> selects the more specific `show(B)`. The receiver's <runtime type> is `C`, so <dynamic dispatch> invokes `C.show(B)`. Its `super.show(o)` calls `B.show(B)`, returning `"B"`, and the override appends `"C"`. The `show(C)` overload is not visible through receiver type `B`.