class MainClass
{
	static int Foo (double d)
	{
		return 0;
	}

	static int Foo (int d)
	{
		return 100;
	}

	public static int Main ()
	{
		decimal a = new A ();
		long b = new B ();
		if (b != 7)
			return 1;
		
		if (Foo (new B2 ()) != 100)
			return 1;

		return 0;
	}
}

public class A
{
	public static implicit operator int (A a)
	{
		return 6;
	}
}

public class B : A
{
	public static implicit operator int (B b)
	{
		return 7;
	}
}

public class A2
{
	public static implicit operator double (A2 a)
	{
		return 2;
	}
}

public class B2 : A2
{
	public static implicit operator int (B2 b)
	{
		return 3;
	}
}