abstract class Class<T> extends Super<T> implements Interface<T> {
  void method10(covariant List<T> a);
  void method11({covariant Iterable<T>? a});
  void method12({covariant List<T>? a});
  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 set setter2(covariant int a);
  void set setter4(covariant List<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) {}
}

class Subclass<T> extends Class<T> {
  void method1(num a) {}
  void method10(Iterable<T> a) {}
  void method11({Iterable<T>? a}) {}
  void method12({Iterable<T>? 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 set setter1(num a) {}
  void set setter2(num a) {}
  void set setter3(Iterable<T> a) {}
  void set setter4(Iterable<T> a) {}
}

class Super<T> {
  void method1(int a) {}
  void method10(Iterable<T> a) {}
  void method11({List<T>? a}) {}
  void method12({Iterable<T>? 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 set setter1(int a) {}
  void set setter2(num a) {}
  void set setter3(List<T> a) {}
  void set setter4(Iterable<T> a) {}
}

main() {}
