using System;

interface IList 
{
	int Count ();
}

interface ICounter 
{
	int Count { set; }
}

interface IListCounter: IList, ICounter
{
}

interface IA
{
	int Value ();
}

interface IB : IA
{
	new int Value { get; }
}

interface IC : IB
{
	new int Value { get; }
}

interface IBB : IList, ICounter
{
}

interface ICC : IBB
{
}

interface IM1
{
    void Add (int arg);
}

interface IM2 : IM1
{
    int Add (int arg, bool now);
}

class Test
{
	public static void Main ()
	{
	}
	
	static void Foo (IListCounter t)
	{
		t.Count ();
	}
	
	void Foo2 (IC b)
	{
		int i = b.Value;
	}
	
	void Foo3 (ICC c)
	{
		c.Count ();
	}
    
	void Foo4 (IM2 im2)
	{
		im2.Add (2);
	}

}