abstract class A {
  covariant num property6 = 0;
  int get property1;
  int get property2;
  int property4 = 0;
  int property5 = 0;
  num get property3;
  void set property1(int i);
  void set property2(int i);
  void set property3(int i);
}

abstract class B1 {
  B1(this.property4, this.property5, this.property6);
  final int property4;
  final int property5;
  final num property6;
  int get property1;
  int get property2;
  num get property3;
}

abstract class B2 implements B1 {
  void set property1(int i);
  void set property2(num i);
  void set property3(int i);
  void set property4(int i);
  void set property5(num i);
  void set property6(int i);
}

abstract class C1 {
  int property4 = 0;
  int property6 = 0;
  num property5 = 0;
  void set property1(int i);
  void set property2(num i);
  void set property3(int i);
}

abstract class C2 implements C1 {
  int get property1;
  int get property2;
  int get property4;
  int get property5;
  num get property3;
  num get property6;
}

abstract class D1 {
  int get property1;
  int get property2;
  num get property3;
}

abstract class D2 {
  void set property1(int i);
  void set property2(num i);
  void set property3(int i);
}

abstract class D3 implements D1, D2 {}

abstract class D4 implements D3 {}

main() {}
