using System;

public interface IFoo<S>
{ }

public class ArrayList<T>
{
	public virtual int InsertAll (IFoo<T> foo)
	{
		return 0;
	}

        public virtual int InsertAll<U> (IFoo<U> foo)
		where U : T
        {
		return 1;
        }

	public virtual int AddAll (IFoo<T> foo)
	{
		return InsertAll (foo);
	}
}

class X
{
	public static int Main ()
	{
		ArrayList<int> list = new ArrayList<int> ();
		return list.AddAll (null);
	}
}