using System;
using System.Runtime.CompilerServices;

interface IFoo
{
	[IndexerName ("Bar")]
	int this[int i] { get; }
}

class Foo : IFoo
{
	public int this[int i] { get { return 42; } }
}

abstract class Bar
{
	[IndexerName ("Baz")]
	public abstract int this[int i] { get; }
}

class Babar : Bar
{
	public override int this[int i] { get { return 42; } }
}

class Test
{
	public static int Main ()
	{
		if (typeof (Foo).GetProperty ("Bar") != null)
			return 1;

		if (typeof (Babar).GetProperty ("Baz") == null)
			return 2;

		return 0;
	}
}