trait Cov[+A]
trait Con[-A]
trait Inv[A]

trait Trait[-A, +B, C] {
  // trait Inner[-D <: C, +E >: C, F] {
  trait Inner[-D <: C, +E >: C, F] {
    def f0(x: A): Unit = ()
    def f1(x: B): Unit = ()
    def f2(x: C): Unit = ()
    def f3(x: D): Unit = ()
    def f4(x: E): Unit = ()
    def f5(x: F): Unit = ()

    def f6(): A = ???
    def f7(): B = ???
    def f8(): C = ???
    def f9(): D = ???
    def f10(): E = ???
    def f11(): F = ???

    def f12(f: A => A): Unit = ()
    def f13(f: A => B): Unit = ()
    def f14(f: A => C): Unit = ()
    def f15(f: A => D): Unit = ()
    def f16(f: A => E): Unit = ()
    def f17(f: A => F): Unit = ()
    def f18(f: B => A): Unit = ()
    def f19(f: B => B): Unit = ()
    def f20(f: B => C): Unit = ()
    def f21(f: B => D): Unit = ()
    def f22(f: B => E): Unit = ()
    def f23(f: B => F): Unit = ()
    def f24(f: C => A): Unit = ()
    def f25(f: C => B): Unit = ()
    def f26(f: C => C): Unit = ()
    def f27(f: C => D): Unit = ()
    def f28(f: C => E): Unit = ()
    def f29(f: C => F): Unit = ()
    def f30(f: D => A): Unit = ()
    def f31(f: D => B): Unit = ()
    def f32(f: D => C): Unit = ()
    def f33(f: D => D): Unit = ()
    def f34(f: D => E): Unit = ()
    def f35(f: D => F): Unit = ()
    def f36(f: E => A): Unit = ()
    def f37(f: E => B): Unit = ()
    def f38(f: E => C): Unit = ()
    def f39(f: E => D): Unit = ()
    def f40(f: E => E): Unit = ()
    def f41(f: E => F): Unit = ()
    def f42(f: F => A): Unit = ()
    def f43(f: F => B): Unit = ()
    def f44(f: F => C): Unit = ()
    def f45(f: F => D): Unit = ()
    def f46(f: F => E): Unit = ()
    def f47(f: F => F): Unit = ()

    def f48(): A => A = null
    def f49(): A => B = null
    def f50(): A => C = null
    def f51(): A => D = null
    def f52(): A => E = null
    def f53(): A => F = null
    def f54(): B => A = null
    def f55(): B => B = null
    def f56(): B => C = null
    def f57(): B => D = null
    def f58(): B => E = null
    def f59(): B => F = null
    def f60(): C => A = null
    def f61(): C => B = null
    def f62(): C => C = null
    def f63(): C => D = null
    def f64(): C => E = null
    def f65(): C => F = null
    def f66(): D => A = null
    def f67(): D => B = null
    def f68(): D => C = null
    def f69(): D => D = null
    def f70(): D => E = null
    def f71(): D => F = null
    def f72(): E => A = null
    def f73(): E => B = null
    def f74(): E => C = null
    def f75(): E => D = null
    def f76(): E => E = null
    def f77(): E => F = null
    def f78(): F => A = null
    def f79(): F => B = null
    def f80(): F => C = null
    def f81(): F => D = null
    def f82(): F => E = null
    def f83(): F => F = null

    def f84(x: A): A = ???
    def f85(x: A): B = ???
    def f86(x: A): C = ???
    def f87(x: A): D = ???
    def f88(x: A): E = ???
    def f89(x: A): F = ???
    def f90(x: B): A = ???
    def f91(x: B): B = ???
    def f92(x: B): C = ???
    def f93(x: B): D = ???
    def f94(x: B): E = ???
    def f95(x: B): F = ???
    def f96(x: C): A = ???
    def f97(x: C): B = ???
    def f98(x: C): C = ???
    def f99(x: C): D = ???
    def f100(x: C): E = ???
    def f101(x: C): F = ???
    def f102(x: D): A = ???
    def f103(x: D): B = ???
    def f104(x: D): C = ???
    def f105(x: D): D = ???
    def f106(x: D): E = ???
    def f107(x: D): F = ???
    def f108(x: E): A = ???
    def f109(x: E): B = ???
    def f110(x: E): C = ???
    def f111(x: E): D = ???
    def f112(x: E): E = ???
    def f113(x: E): F = ???
    def f114(x: F): A = ???
    def f115(x: F): B = ???
    def f116(x: F): C = ???
    def f117(x: F): D = ???
    def f118(x: F): E = ???
    def f119(x: F): F = ???

    object O1 extends Cov[A]
    object O2 extends Cov[B]
    object O3 extends Cov[C]
    object O4 extends Cov[D]
    object O5 extends Cov[E]
    object O6 extends Cov[F]
    object O7 extends Con[A]
    object O8 extends Con[B]
    object O9 extends Con[C]
    object O10 extends Con[D]
    object O11 extends Con[E]
    object O12 extends Con[F]
    object O13 extends Inv[A]
    object O14 extends Inv[B]
    object O15 extends Inv[C]
    object O16 extends Inv[D]
    object O17 extends Inv[E]
    object O18 extends Inv[F]
  }
}

trait Trait2[-A, +B, C] {
  // trait Inner[-D <: C, +E >: C, F] {
  def method[D <: A, E >: B, F](): Unit = {
    def f0(x: A): Unit = ()
    def f1(x: B): Unit = ()
    def f2(x: C): Unit = ()
    def f3(x: D): Unit = ()
    def f4(x: E): Unit = ()
    def f5(x: F): Unit = ()

    def f6(): A = ???
    def f7(): B = ???
    def f8(): C = ???
    def f9(): D = ???
    def f10(): E = ???
    def f11(): F = ???

    def f12(f: A => A): Unit = ()
    def f13(f: A => B): Unit = ()
    def f14(f: A => C): Unit = ()
    def f15(f: A => D): Unit = ()
    def f16(f: A => E): Unit = ()
    def f17(f: A => F): Unit = ()
    def f18(f: B => A): Unit = ()
    def f19(f: B => B): Unit = ()
    def f20(f: B => C): Unit = ()
    def f21(f: B => D): Unit = ()
    def f22(f: B => E): Unit = ()
    def f23(f: B => F): Unit = ()
    def f24(f: C => A): Unit = ()
    def f25(f: C => B): Unit = ()
    def f26(f: C => C): Unit = ()
    def f27(f: C => D): Unit = ()
    def f28(f: C => E): Unit = ()
    def f29(f: C => F): Unit = ()
    def f30(f: D => A): Unit = ()
    def f31(f: D => B): Unit = ()
    def f32(f: D => C): Unit = ()
    def f33(f: D => D): Unit = ()
    def f34(f: D => E): Unit = ()
    def f35(f: D => F): Unit = ()
    def f36(f: E => A): Unit = ()
    def f37(f: E => B): Unit = ()
    def f38(f: E => C): Unit = ()
    def f39(f: E => D): Unit = ()
    def f40(f: E => E): Unit = ()
    def f41(f: E => F): Unit = ()
    def f42(f: F => A): Unit = ()
    def f43(f: F => B): Unit = ()
    def f44(f: F => C): Unit = ()
    def f45(f: F => D): Unit = ()
    def f46(f: F => E): Unit = ()
    def f47(f: F => F): Unit = ()

    def f48(): A => A = null
    def f49(): A => B = null
    def f50(): A => C = null
    def f51(): A => D = null
    def f52(): A => E = null
    def f53(): A => F = null
    def f54(): B => A = null
    def f55(): B => B = null
    def f56(): B => C = null
    def f57(): B => D = null
    def f58(): B => E = null
    def f59(): B => F = null
    def f60(): C => A = null
    def f61(): C => B = null
    def f62(): C => C = null
    def f63(): C => D = null
    def f64(): C => E = null
    def f65(): C => F = null
    def f66(): D => A = null
    def f67(): D => B = null
    def f68(): D => C = null
    def f69(): D => D = null
    def f70(): D => E = null
    def f71(): D => F = null
    def f72(): E => A = null
    def f73(): E => B = null
    def f74(): E => C = null
    def f75(): E => D = null
    def f76(): E => E = null
    def f77(): E => F = null
    def f78(): F => A = null
    def f79(): F => B = null
    def f80(): F => C = null
    def f81(): F => D = null
    def f82(): F => E = null
    def f83(): F => F = null

    def f84(x: A): A = ???
    def f85(x: A): B = ???
    def f86(x: A): C = ???
    def f87(x: A): D = ???
    def f88(x: A): E = ???
    def f89(x: A): F = ???
    def f90(x: B): A = ???
    def f91(x: B): B = ???
    def f92(x: B): C = ???
    def f93(x: B): D = ???
    def f94(x: B): E = ???
    def f95(x: B): F = ???
    def f96(x: C): A = ???
    def f97(x: C): B = ???
    def f98(x: C): C = ???
    def f99(x: C): D = ???
    def f100(x: C): E = ???
    def f101(x: C): F = ???
    def f102(x: D): A = ???
    def f103(x: D): B = ???
    def f104(x: D): C = ???
    def f105(x: D): D = ???
    def f106(x: D): E = ???
    def f107(x: D): F = ???
    def f108(x: E): A = ???
    def f109(x: E): B = ???
    def f110(x: E): C = ???
    def f111(x: E): D = ???
    def f112(x: E): E = ???
    def f113(x: E): F = ???
    def f114(x: F): A = ???
    def f115(x: F): B = ???
    def f116(x: F): C = ???
    def f117(x: F): D = ???
    def f118(x: F): E = ???
    def f119(x: F): F = ???

    object O1 extends Cov[A]
    object O2 extends Cov[B]
    object O3 extends Cov[C]
    object O4 extends Cov[D]
    object O5 extends Cov[E]
    object O6 extends Cov[F]
    object O7 extends Con[A]
    object O8 extends Con[B]
    object O9 extends Con[C]
    object O10 extends Con[D]
    object O11 extends Con[E]
    object O12 extends Con[F]
    object O13 extends Inv[A]
    object O14 extends Inv[B]
    object O15 extends Inv[C]
    object O16 extends Inv[D]
    object O17 extends Inv[E]
    object O18 extends Inv[F]

    ()
  }
}
