class Super<T> {
  void method1(int a) {}
  void method2({int? a}) {}
  void method3(int a) {}
  void method4(num a) {}
  void method5({int? a}) {}
  void method6({num? a}) {}
  void method7(List<T> a) {}
  void method8({List<T>? a}) {}
  void method9(List<T> a) {}
  void method10(Iterable<T> a) {}
  void method11({List<T>? a}) {}
  void method12({Iterable<T>? a}) {}
  void set setter1(int a) {}
  void set setter2(num a) {}
  void set setter3(List<T> a) {}
  void set setter4(Iterable<T> a) {}
}

class Interface<T> {
  void method1(covariant num a) {}
  void method2({covariant num? a}) {}
  void method7(covariant Iterable<T> a) {}
  void method8({covariant Iterable<T>? a}) {}
  void set setter1(covariant num a) {}
  void set setter3(covariant Iterable<T> a) {}
}

abstract class Class<T> extends Super<T> implements Interface<T> {
  void method3(covariant num a);
  void method4(covariant int a);
  void method5({covariant num? a});
  void method6({covariant int? a});
  void method9(covariant Iterable<T> a);
  void method10(covariant List<T> a);
  void method11({covariant Iterable<T>? a});
  void method12({covariant List<T>? a});
  void set setter2(covariant int a);
  void set setter4(covariant List<T> a);
}

class Subclass<T> extends Class<T> {
  void method1(num a) {}
  void method2({num? a}) {}
  void method3(num a) {}
  void method4(num a) {}
  void method5({num? a}) {}
  void method6({num? a}) {}
  void method7(Iterable<T> a) {}
  void method8({Iterable<T>? a}) {}
  void method9(Iterable<T> a) {}
  void method10(Iterable<T> a) {}
  void method11({Iterable<T>? a}) {}
  void method12({Iterable<T>? a}) {}
  void set setter1(num a) {}
  void set setter2(num a) {}
  void set setter3(Iterable<T> a) {}
  void set setter4(Iterable<T> a) {}
}

main() {}
