using System;
using System.Collections.Generic;

class C
{
	static int Test (List<int> arg)
	{
		return 10;
	}

	static int Test (string arg)
	{
		return 9;
	}

	static int Test (int arg)
	{
		return 8;
	}

	static R Method<T, R> (IEnumerable<T> t, Func<T, R> a)
	{
		return a (default (T));
	}

	static R Method2<T, R> (IEnumerable<T> t, Func<List<T>, R> a)
	{
		return a (default (List<T>));
	}

	public static int Main ()
	{
		if (Method (new int[] { 1 }, Test) != 8)
			return 1;

		if (Method2 (new int[] { 1 }, Test) != 10)
			return 2;

		return 0;
	}
}