abstract class A : SequencedCollection<Int> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

abstract class B : SequencedCollection<Int> {
  override val size: Int
    field = size
    override get

  constructor(size: Int) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun removeFirst(): Int {
    return 1
  }

  override fun reversed(): SequencedCollection<Int> {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

}

abstract class C : Java1 {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

}

abstract class D : Java1 {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

  override fun remove(element: Int?): Boolean {
    return true
  }

  override fun removeFirst(): Int {
    return 2
  }

  override fun reversed(): SequencedCollection<Int> {
    return CHECK_NOT_NULL<Nothing>(arg0 = null)
  }

  override val size: Int
    override get(): Int {
      return 5
    }

}

abstract class E : Java1, Java2 {
  override val size: Int
    field = size
    override get

  constructor(size: Int) /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

  override fun getFirst(): Int {
    return 2
  }

}

abstract class F : Java2, KotlinInterface {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun getFirst(): Int {
    return 2
  }

}

abstract class G : Java3 {
  constructor() /* primary */ {
    super/*Java3*/()
    /* <init>() */

  }

}

interface KotlinInterface : SequencedCollection<Int> {
}

fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G) {
  a.addFirst(p0 = 1)
  a.addLast(p0 = null)
  a.getFirst() /*~> Unit */
  a.getLast() /*~> Unit */
  a.first<@FlexibleNullability Int?>() /*~> Unit */
  a.last<@FlexibleNullability Int?>() /*~> Unit */
  a.removeFirst() /*~> Unit */
  a.removeLast() /*~> Unit */
  a.reversed() /*~> Unit */
  b.addFirst(p0 = 1)
  b.addLast(p0 = null)
  b.getFirst() /*~> Unit */
  b.getLast() /*~> Unit */
  b.removeFirst() /*~> Unit */
  b.removeLast() /*~> Unit */
  b.reversed() /*~> Unit */
  c.addFirst(p0 = 1)
  c.addLast(p0 = null)
  c.getFirst() /*~> Unit */
  c.getLast() /*~> Unit */
  c.removeFirst() /*~> Unit */
  c.removeLast() /*~> Unit */
  c.reversed() /*~> Unit */
  d.removeFirst() /*~> Unit */
  d.removeLast() /*~> Unit */
  d.addFirst(p0 = 1)
  d.addLast(p0 = null)
  d.reversed() /*~> Unit */
  d.getFirst() /*~> Unit */
  d.getLast() /*~> Unit */
  e.getFirst() /*~> Unit */
  e.getLast() /*~> Unit */
  e.removeFirst() /*~> Unit */
  e.removeLast() /*~> Unit */
  e.addFirst(p0 = 1)
  e.addLast(p0 = null)
  e.reversed() /*~> Unit */
  f.getFirst() /*~> Unit */
  f.getLast() /*~> Unit */
  f.removeFirst() /*~> Unit */
  f.removeLast() /*~> Unit */
  f.addFirst(p0 = 1)
  f.addLast(p0 = null)
  f.reversed() /*~> Unit */
  g.getFirst() /*~> Unit */
  g.getLast() /*~> Unit */
  g.removeFirst() /*~> Unit */
  g.removeLast() /*~> Unit */
  g.addFirst(p0 = 1)
  g.addLast(p0 = null)
  g.reversed() /*~> Unit */
}
