using System;

abstract class A<T>
{
	public abstract void Foo<U> (U arg) where U : T;
}

class B : A<int>
{
	public override void Foo<U> (U arg)
	{
		ValueType vt = arg;
		Next (arg);
	}
	
	void Next<UU> (UU a) where UU : struct
	{
	}

	public static void Main ()
	{
		new B ().Foo (5);
	}
}