enum class ProtocolState {
  WAITING {
    override fun signal() = ProtocolState.TALKING
  },

  TALKING {
    override fun signal() = ProtocolState.WAITING
  };

  abstract fun signal() : ProtocolState
}


fun box(): String {
   var x: ProtocolState = ProtocolState.WAITING
   x = x.signal()
   if (x != ProtocolState.TALKING) return "fail 1"
   x = x.signal()
   if (x != ProtocolState.WAITING) return "fail 2"
   return "OK"
}