using System;

class First
{
	public virtual object this [string name]
	{
		get { return "First"; }
		set { }
	}
}

class Second : First
{
	public override object this [string name]
	{
		get { return "Second"; }
		set { }
	}
}

class Third : Second
{
	public override object this [string name]
	{
		get { return base [name]; }
		set { }
	}
}

class a
{
	public static int Main (string[] args)
	{
		First t = (First)new Third ();
		if (t ["test"] != "Second")
			return 1;
		
		return 0;
	}
}