interface A<T> {
    fun foo(t: T) = "A"
}

interface B<T> {
    fun foo(t: T) = "B"
}

class Z : A<Int>, B<Int> {
    override fun foo(t: Int) = "Z"
}


fun box(): String {
    val z = Z()
    val a: A<Int> = z
    val b: B<Int> = z
    return when {
        z.foo(0) != "Z" -> "Fail #1"
        a.foo(0) != "Z" -> "Fail #2"
        b.foo(0) != "Z" -> "Fail #3"
        else -> "OK"
    }
}
