public Square this[Point p] { get { Contract.Requires(p.X >= 0 && p.Y >= 0 && p.X < Width && p.Y < Height); return board[p.X, p.Y]; } set { Contract.Requires(p.X >= 0 && p.Y >= 0 && p.X < Width && p.Y < Height); board[p.X, p.Y] = value; } }