abstract class C5 {
  String call(int x, num y);
}

class A1 {
  A1(int x);
}

class A2 {
  A2({required String x});
}

class A3 {
  A3(num Function(double) f);
}

class A4 {
  A4({required num Function(double) f});
}

class A5 {
  A5(String Function(int, num) f);
}

class A6 {
  A6({required String Function(int, num) f});
}

class A7 {
  A7(
      {required int x1,
      required int x2,
      required bool Function(Object) f1,
      required bool Function(Object) f2,
      required void Function(dynamic) g1,
      required void Function(dynamic) g2});
}

class B1 extends A1 {
  B1.one(dynamic super.x);
  B1.two(dynamic super.x) : super();
}

class B2 extends A2 {
  B2.one({required dynamic super.x});
  B2.two({required dynamic super.x}) : super();
}

class B3 extends A3 {
  B3.one(X Function<X>(double) super.f);
  B3.two(X Function<X>(double) super.f) : super();
}

class B4 extends A4 {
  B4.one({required X Function<X>(double) super.f});
  B4.two({required X Function<X>(double) super.f}) : super();
}

class B5 extends A5 {
  B5.one(C5 super.f);
  B5.two(C5 super.f) : super();
}

class B6 extends A6 {
  B6.one({required C5 super.f});
  B6.two({required C5 super.f}) : super();
}

class B7 extends A7 {
  B7(
      {required dynamic super.x1,
      required dynamic x2,
      required X Function<X>(Object) super.f1,
      required X Function<X>(Object) f2,
      required void Function<X>(X) super.g1,
      required void Function<X>(X) g2})
      : super(x2: x2, f2: f2, g2: g2);
}

main() {}
