private static void PerformGraphOps()
        {
            var graph = new Graphs();

            graph.AddNode("a");
            graph.AddNode("b");
            graph.AddNode("c");
            graph.AddEdge("a", "b");
            graph.AddEdge("a", "c");
            graph.Print();

            var graph2 = new Graphs();

            graph2.AddNode("a");
            graph2.AddNode("b");
            graph2.AddNode("c");
            graph2.AddNode("d");
            graph2.AddEdge("a", "b");
            graph2.AddEdge("a", "c");
            graph2.AddEdge("b", "d");
            graph2.AddEdge("d", "c");
            Console.WriteLine("Recursive Depth First Traversal");
            graph2.RecursiveDepthFirstTraversal("a");
            Console.WriteLine("Iterative Depth First Traversal");
            graph2.IterativeDepthFirstTraversal("a");
            Console.WriteLine("Breadth First Traversal");
            graph2.BreadthFirstTraversal("a");

            var graph3 = new Graphs();

            graph3.AddNode("x");
            graph3.AddNode("a");
            graph3.AddNode("b");
            graph3.AddNode("p");
            graph3.AddEdge("x", "a");
            graph3.AddEdge("x", "b");
            graph3.AddEdge("a", "p");
            graph3.AddEdge("b", "p");

            Console.WriteLine("Topolocally Sorted List");
            graph3.TopologicalSort().ForEach(x =>
            {
                Console.WriteLine(x);
            });

            var graph4 = new Graphs();

            graph4.AddNode("a");
            graph4.AddNode("b");
            graph4.AddNode("c");
            graph4.AddNode("d");
            graph4.AddEdge("a", "b");
            graph4.AddEdge("b", "c");
            graph4.AddEdge("c", "a");
            graph4.AddEdge("a", "d");
            Console.WriteLine("Graph contains Cycle" + graph4.IsCyclePresent());
        }