using System;

class Foo<T,U>
{
	public int Test (T t, U u)
	{
		return 1;
	}

	public int Test (int t, U u)
	{
		return 2;
	}

	public int Test (T t, float u)
	{
		return 3;
	}

	public int Test (int t, float u)
	{
		return 4;
	}
}

class X
{
	public static int Main ()
	{
		Foo<long,float> a = new Foo<long,float> ();
		if (a.Test (3L, 3.14F) != 3)
			return 1;
		if (a.Test (3L, 8) != 3)
			return 2;
		if (a.Test (3, 3.14F) != 4)
			return 3;
		if (a.Test (3, 8) != 4)
			return 4;

		Foo<long,double> b = new Foo<long,double> ();
		if (b.Test (3L, 3.14F) != 3)
			return 5;
		if (b.Test (3, 3.14F) != 4)
			return 6;
		if (b.Test (3L, 3.14F) != 3)
			return 7;
		if (b.Test (3L, 5) != 3)
			return 8;

		Foo<string,float> c = new Foo<string,float> ();
		if (c.Test ("Hello", 3.14F) != 3)
			return 9;

		Foo<int,string> d = new Foo<int,string> ();
		if (d.Test (3, "Hello") != 2)
			return 10;

		return 0;
	}
}