interface M {
    var backingB : Int
    var b : Int
        get() = backingB
        set(value: Int) {
            backingB = value
        }
}

class N() : M {
    public override var backingB : Int = 0

    val a : Int
        get() {
            super.b = super.b + 1
            return super.b + 1
        }
    override var b: Int = a + 1

    val superb : Int
        get() = super.b
}

fun box(): String {
    val n = N()
    n.a
    n.b
    n.superb
    if (n.b == 3 && n.a == 4 && n.superb == 3) return "OK";
    return "fail";
}
