using System;
class A
{
public virtual void Foo() { Console.WriteLine("A"); }
}
class B : A
{
public new virtual void Foo() { Console.WriteLine("B"); }
}
class C : B
{
public override void Foo() { Console.WriteLine("C"); }
}
public class Test
{
public static void Main()
{
((A)(new A())).Foo();
((A)(new B())).Foo();
((A)(new C())).Foo();
((B)(new B())).Foo();
((B)(new C())).Foo();
((C)(new C())).Foo();
}
}
dXNpbmcgU3lzdGVtOwoKY2xhc3MgQQp7CglwdWJsaWMgdmlydHVhbCB2b2lkIEZvbygpIHsgQ29uc29sZS5Xcml0ZUxpbmUoIkEiKTsgfQp9CgpjbGFzcyBCIDogQQp7CglwdWJsaWMgbmV3IHZpcnR1YWwgdm9pZCBGb28oKSB7IENvbnNvbGUuV3JpdGVMaW5lKCJCIik7IH0KfQoKY2xhc3MgQyA6IEIKewoJcHVibGljIG92ZXJyaWRlIHZvaWQgRm9vKCkgeyBDb25zb2xlLldyaXRlTGluZSgiQyIpOyB9Cn0KCgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJKChBKShuZXcgQSgpKSkuRm9vKCk7CgkJKChBKShuZXcgQigpKSkuRm9vKCk7CgkJKChBKShuZXcgQygpKSkuRm9vKCk7CgkJCgkJKChCKShuZXcgQigpKSkuRm9vKCk7CgkJKChCKShuZXcgQygpKSkuRm9vKCk7CgkJCgkJKChDKShuZXcgQygpKSkuRm9vKCk7CgkJCgl9Cn0=