using System;

public interface IFoo
{
	IFoo Hello ();
}

public interface IFoo<T> : IFoo
{
	new IFoo<T> Hello ();
}

public interface ICollectionValue<T>: IFoo<T>
{
}

public interface ICollection<T>: ICollectionValue<T>
{ }

public abstract class EnumerableBase<T> : IFoo<T>
{
	public abstract IFoo<T> Hello();

	IFoo IFoo.Hello ()
	{
		return Hello ();
	}
}

public abstract class CollectionBase<T> : EnumerableBase<T>
{
}

public class HashBag<T>: CollectionBase<T>, ICollection<T>
{
	public override IFoo<T> Hello ()
	{
		return this;
	}
}

class X
{
	public static void Main ()
	{
	}
}