Index: src/hugo/graph_wrapper.h
===================================================================
--- src/hugo/graph_wrapper.h	(revision 589)
+++ src/hugo/graph_wrapper.h	(revision 593)
@@ -466,4 +466,23 @@
     /// Returns true if \c n is hidden.
     bool hidden(const Edge& e) const { return !(*edge_filter_map)[e]; }
+
+    /// This is a linear time operation an works only if 
+    /// NodeIt is defined.
+    int nodeNum() const { 
+      int i=0;
+      NodeIt n;
+      for (this->first(n); this->valid(n); this->next(n)) ++i;
+      return i; 
+    }
+
+    /// This is a linear time operation and works only if 
+    /// EdgeIt is defined.
+    int edgeNum() const { 
+      int i=0;
+      EdgeIt e;
+      for (this->first(e); this->valid(e); this->next(e)) ++i;
+      return i; 
+    }
+
   };
 
@@ -1319,5 +1338,4 @@
 } //namespace hugo
 
-
 #endif //HUGO_GRAPH_WRAPPER_H
 
Index: src/work/jacint/graph_gen.h
===================================================================
--- src/work/jacint/graph_gen.h	(revision 558)
+++ src/work/jacint/graph_gen.h	(revision 593)
@@ -62,3 +62,17 @@
   }
 
+  /// Generates a complete graph in the undirected sense 
+  /// with n nodes and m edges.
+  /// Before generating the random graph, \c g.clear() is called.
+  template<typename Graph>
+  void completeGraph(Graph& g, int n) {
+    g.clear();
+    std::vector<typename Graph::Node> nodes;
+    for (int i=0; i<n; ++i)
+      nodes.push_back(g.addNode());
+    for (int i=0; i<n; ++i) 
+      for (int j=i+1; j<n; ++j)
+	g.addEdge(nodes[i], nodes[j]);
+  }
+  
 } //namespace hugo
