public class A {
    public C cc( C x ) { System.out.print( "A" ); return null; }
    public C cd( D x ) { System.out.print( "A" ); return null; }
    public D dc( C x ) { System.out.print( "A" ); return null; }
    public D dd( D x ) { System.out.print( "A" ); return null; }

    public static void main( String[] args ) {
        B b = new B();

        b.cc( new C() ); b.cc( new D() );
        b.cd( new C() ); b.cd( new D() );
        b.dc( new C() ); b.dc( new D() ); 
        b.dd( new C() ); b.dd( new D() );
    }
}

class B extends A {
    public C cc( C x ) { System.out.print( "B" ); return null; }
    public D cd( C x ) { System.out.print( "B" ); return null; }
    public C dc( D x ) { System.out.print( "B" ); return null; }
    public D dd( C x ) { System.out.print( "B" ); return null; }
}

class C {}
class D extends C {}
