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 {
		public static 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;
				
			if (result == 0) return 200;
			return result;
		}
	};
};
