private static bool FindArea(out ConectedArea area)
        {
            for (int row = 0; row < maze.GetLength(0); row++)
            {
                for (int col = 0; col < maze.GetLength(1); col++)
                {
                    if (!maze[row, col])
                    {
                        area = new ConectedArea(0, row, col);
                        return(true);
                    }
                }
            }

            area = null;
            return(false);
        }
        private static void CrawArea(ConectedArea area, int row, int col)
        {
            if (row < 0 || row >= maze.GetLength(0) ||
                col < 0 || col >= maze.GetLength(1) ||
                maze[row, col])
            {
                return;
            }

            maze[row, col] = true;
            area++;

            CrawArea(area, row, col - 1); // Left
            CrawArea(area, row - 1, col); // Up
            CrawArea(area, row, col + 1); // Right
            CrawArea(area, row + 1, col); // Down
        }