public static void UpdateColumnNeighbours(this Grid grid, int y)
 {
     Console.WriteLine("update column {0}", y);
     for (int i = 0; i < grid.GridSize; i++)
     {
         if (grid.GetCell(i, y).Solved)
         {
             continue;
         }
         grid.GetCell(i, y).Options = grid.UpdateCellOptions(i, y, grid.GetCell(i, y).Square);
         grid.CheckCellForSingleOption(i, y);
     }
 }
 public static void UpdateSquareNeighbours(this Grid grid, int s)
 {
     Console.WriteLine("update square {0}", s);
     Cell[] square = grid.GetSquareCells(s);
     for (int i = 0; i < grid.GridSize; i++)
     {
         if (grid.GetCell(square[i].X, square[i].Y).Solved)
         {
             continue;
         }
         grid.GetCell(square[i].X, square[i].Y).Options = grid.UpdateCellOptions(square[i].X, square[i].Y, s);
         grid.CheckCellForSingleOption(square[i].X, square[i].Y);
     }
 }
        public static void UpdateRowNeighbours(this Grid grid, int x)
        {
            Console.WriteLine("update row  {0}", x);
            for (int i = 0; i < grid.GridSize; i++)
            {
                if (grid.GetCell(x, i).Solved)
                {
                    continue;
                }

                grid.GetCell(x, i).Options = grid.UpdateCellOptions(x, i, grid.GetCell(x, i).Square);

                grid.CheckCellForSingleOption(x, i);
            }
        }