using System;
abstract class B {
public virtual A Fct1<A, C>(A a, C c) { return a; }
public abstract int Fct2<U>(U u) where U:class,IComparable<U>,new();
}
class D1 : B {
public override X Fct1<X, Y>(X x, Y y) { return x; }
public override int Fct2<U>(U u) { return 0; }
}
interface I {
A Fct1<A, C>(A a, C b);
int Fct2<U>(U u) where U : class, IComparable<U>, new();
}
class D2 : I {
public X Fct1<X, Y>(X x, Y y) { return x; }
public int Fct2<U>(U u) where U : class, IComparable<U>, new()
{ return 0; }
}