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; }
}