// Formatted problems:
//
// pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart:14:7: Error: 'M2 with M0' can't implement both '#lib1::I<dart.core::List<dart.core::Map<dart.core::int, dart.core::int>>>' and '#lib1::I<dart.core::List<dynamic>>'
// class A extends M2<int> with M0 {}
//       ^
//
// pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart:14:7: Error: 'A' can't implement both '#lib1::I<dart.core::List<dart.core::Map<dart.core::int, dart.core::int>>>' and '#lib1::I<dart.core::List<dynamic>>'
// class A extends M2<int> with M0 {}
//       ^

library;
import self as self;
import "dart:core" as core;

class I<X extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::I<self::I::X>
    ;
}
class M0<T extends core::Object = dynamic> extends self::I<core::List<self::M0::T>> {
  synthetic constructor •() → self::M0<self::M0::T>
    ;
}
class M1<T extends core::Object = dynamic> extends self::I<core::List<self::M1::T>> {
  synthetic constructor •() → self::M1<self::M1::T>
    ;
}
class M2<T extends core::Object = dynamic> extends self::M1<core::Map<self::M2::T, self::M2::T>> {
  synthetic constructor •() → self::M2<self::M2::T>
    ;
}
abstract class _A&M2&M0 = self::M2<core::int> with self::M0<dynamic> {
  synthetic constructor •() → self::_A&M2&M0
    : super self::M2::•()
    ;
}
class A extends self::_A&M2&M0 {
  synthetic constructor •() → self::A
    ;
}
static method main() → dynamic
  ;
