using System;

public interface A
{
	void Foo ();
}

public interface B : A
{ }

public abstract class X : A
{
	public abstract void Foo ();
}

public abstract class Y : X, B
{ }

public class Z : Y
{
	public override void Foo ()
	{
		Console.WriteLine ("Hello World!");
	}
}

class Test
{
	public static int Main ()
	{
		Z z = new Z ();
		A a = z;
		a.Foo ();
		return 0;
	}
}