public static void Fill_Random_DFS(
            this PM_Maze maze,
            Random rand
            )
        {
            if (maze == null)
            {
                return;
            }
            List <UEdge2i> allPossibleEdges = maze.ConnectedCells_ExpansionEdges_List();

            // temporarily commented out
            allPossibleEdges.Shuffle(rand);

            while (allPossibleEdges.Count > 0)
            {
                UEdge2i edge = allPossibleEdges.Pop_Last_Item();
                if (maze.Q_Is_Cell_Unconnected(edge.exit))
                {
                    maze.OP_AddEdge(edge);
                    List <UEdge2i> newEdges = maze.Cell_ExpansionEdges_List(edge.exit);
                    newEdges.Shuffle(rand);
                    allPossibleEdges.AddRange(newEdges);
                }
            }
        }
        public static void Fill_RandomBFS(
            this PM_Maze maze,
            Random rand
            )
        {
            if (maze == null)
            {
                return;
            }
            // edges
            List <UEdge2i> edges = maze.ConnectedCells_ExpansionEdges_List();

            while (edges.Count > 0)
            {
                UEdge2i edge = edges.Pop_Random_Item(rand);
                if (maze.Q_Is_Cell_Unconnected(edge.exit))
                {
                    maze.OP_AddEdge(edge);
                    edges.AddRange(maze.Cell_ExpansionEdges_List(edge.exit));
                }
            }
        }