public struct KeyValuePair<X,Y>
{
	public KeyValuePair (X x, Y y)
	{ }
}

public interface IComparer<T>
{
	int Compare (T x);
}

public class KeyValuePairComparer<K,V> : IComparer<KeyValuePair<K,V>>
{
	public int Compare (KeyValuePair<K,V> a)
	{
		return 0;
	}
}

public class TreeBag<T>
{
	IComparer<T> comparer;
	T item;

	public TreeBag (IComparer<T> comparer, T item)
	{
		this.comparer = comparer;
		this.item = item;
	}

	public int Find ()
	{
		return comparer.Compare (item);
	}
}

public class X
{
	public static void Main ()
	{
		KeyValuePair<int,int> pair = new KeyValuePair<int,int> (3, 89);
		KeyValuePairComparer<int,int> comparer = new KeyValuePairComparer<int,int> ();
		TreeBag<KeyValuePair<int,int>> bag = new TreeBag<KeyValuePair<int,int>> (comparer, pair);
		bag.Find ();
	}
}