using System;

namespace Obj {
	interface Bah {
		int H ();
	}
	class A : Bah {
		public int F () {return 1;}
		public virtual int G () {return 2;}
		public int H () {return 10;}
	}
	class B : A {
		public new int F () {return 3;}
		public override int G () {return 4;}
		public new int H () {return 11;}
	}
	class Test {
		static public int Main () {
			int result = 0;
			B b = new B ();
			A a = b;
			if (a.F () != 1)
				result |= 1 << 0;
			if (b.F () != 3)
				result |= 1 << 1;
			if (b.G () != 4)
				result |= 1 << 2;
			if (a.G () != 4){
				Console.WriteLine ("oops: " + a.G ());
				result |= 1 << 3;
			}
			if (a.H () != 10)
				result |= 1 << 4;
			if (b.H () != 11)
				result |= 1 << 5;
			if (((A)b).H () != 10)
				result |= 1 << 6;
			if (((B)a).H () != 11)
				result |= 1 << 7;
			return result;
		}
	};
};
