// Formatted problems:
//
// pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'
// class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
//                                      ^

// Unhandled errors:
//
// pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'
// class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
//                                      ^

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

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