Index: src/work/marci_bfs.hh
===================================================================
--- src/work/marci_bfs.hh	(revision 11)
+++ src/work/marci_bfs.hh	(revision 19)
@@ -4,5 +4,4 @@
 #include <queue>
 
-#include <marci_graph_traits.hh>
 #include <marci_property_vector.hh>
 
@@ -11,9 +10,8 @@
   template <typename graph_type>
   struct bfs {
-    typedef typename graph_traits<graph_type>::node_iterator node_iterator;
-    typedef typename graph_traits<graph_type>::edge_iterator edge_iterator;
-    typedef typename graph_traits<graph_type>::each_node_iterator each_node_iterator;
-    typedef typename graph_traits<graph_type>::out_edge_iterator out_edge_iterator;
-
+    typedef typename graph_type::node_iterator node_iterator;
+    typedef typename graph_type::edge_iterator edge_iterator;
+    typedef typename graph_type::each_node_iterator each_node_iterator;
+    typedef typename graph_type::out_edge_iterator out_edge_iterator;
     graph_type& G;
     node_iterator s;
@@ -24,5 +22,5 @@
     bfs(graph_type& _G, node_iterator _s) : G(_G), s(_s), reached(_G), pred(_G), dist(_G) { 
       bfs_queue.push(s); 
-      for(each_node_iterator i=G.first_node(); i.is_valid(); ++i) 
+      for(each_node_iterator i=G.first_node(); i.valid(); ++i) 
 	reached.put(i, false);
       reached.put(s, true);
@@ -35,5 +33,5 @@
 	out_edge_iterator e=G.first_out_edge(v);
 	bfs_queue.pop();
-	for( ; e.is_valid(); ++e) {
+	for( ; e.valid(); ++e) {
 	  node_iterator w=G.head(e);
 	  std::cout << "scan node " << G.id(w) << " from node " << G.id(v) << std::endl;
@@ -54,8 +52,7 @@
   template <typename graph_type> 
   struct bfs_visitor {
-    typedef typename graph_traits<graph_type>::node_iterator node_iterator;
-    typedef typename graph_traits<graph_type>::edge_iterator edge_iterator;
-    typedef typename graph_traits<graph_type>::each_node_iterator each_node_iterator;
-    typedef typename graph_traits<graph_type>::out_edge_iterator out_edge_iterator;
+    typedef typename graph_type::node_iterator node_iterator;
+    typedef typename graph_type::edge_iterator edge_iterator;
+    typedef typename graph_type::out_edge_iterator out_edge_iterator;
     graph_type& G;
     bfs_visitor(graph_type& _G) : G(_G) { }
@@ -74,9 +71,7 @@
   template <typename graph_type, typename reached_type, typename visitor_type>
   struct bfs_iterator {
-    typedef typename graph_traits<graph_type>::node_iterator node_iterator;
-    typedef typename graph_traits<graph_type>::edge_iterator edge_iterator;
-    typedef typename graph_traits<graph_type>::each_node_iterator each_node_iterator;
-    typedef typename graph_traits<graph_type>::out_edge_iterator out_edge_iterator;
-
+    typedef typename graph_type::node_iterator node_iterator;
+    typedef typename graph_type::edge_iterator edge_iterator;
+    typedef typename graph_type::out_edge_iterator out_edge_iterator;
     graph_type& G;
     std::queue<out_edge_iterator>& bfs_queue;
@@ -84,5 +79,5 @@
     visitor_type& visitor;
     void process() {
-      while ( !bfs_queue.empty() && !bfs_queue.front().is_valid() ) { bfs_queue.pop(); } 
+      while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } 
       if (bfs_queue.empty()) return;
       out_edge_iterator e=bfs_queue.front();
@@ -98,28 +93,28 @@
     }
     bfs_iterator(graph_type& _G, std::queue<out_edge_iterator>& _bfs_queue, reached_type& _reached, visitor_type& _visitor) : G(_G), bfs_queue(_bfs_queue), reached(_reached), visitor(_visitor) { 
-      //while ( !bfs_queue.empty() && !bfs_queue.front().is_valid() ) { bfs_queue.pop(); } 
-      is_valid();
+      //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } 
+      valid();
     }
     bfs_iterator<graph_type, reached_type, visitor_type>& operator++() { 
-      //while ( !bfs_queue.empty() && !bfs_queue.front().is_valid() ) { bfs_queue.pop(); } 
+      //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } 
       //if (bfs_queue.empty()) return *this;
-      if (!is_valid()) return *this;
+      if (!valid()) return *this;
       ++(bfs_queue.front());
-      //while ( !bfs_queue.empty() && !bfs_queue.front().is_valid() ) { bfs_queue.pop(); } 
-      is_valid();
+      //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } 
+      valid();
       return *this;
     }
     //void next() { 
-    //  while ( !bfs_queue.empty() && !bfs_queue.front().is_valid() ) { bfs_queue.pop(); } 
+    //  while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } 
     //  if (bfs_queue.empty()) return;
     //  ++(bfs_queue.front());
-    //  while ( !bfs_queue.empty() && !bfs_queue.front().is_valid() ) { bfs_queue.pop(); } 
+    //  while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } 
     //}
-    bool is_valid() { 
-      while ( !bfs_queue.empty() && !bfs_queue.front().is_valid() ) { bfs_queue.pop(); } 
+    bool valid() { 
+      while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } 
       if (bfs_queue.empty()) return false; else return true;
     }
     //bool finished() { 
-    //  while ( !bfs_queue.empty() && !bfs_queue.front().is_valid() ) { bfs_queue.pop(); } 
+    //  while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } 
     //  if (bfs_queue.empty()) return true; else return false;
     //}
@@ -130,16 +125,14 @@
   template <typename graph_type, typename reached_type>
   struct bfs_iterator1 {
-    typedef typename graph_traits<graph_type>::node_iterator node_iterator;
-    typedef typename graph_traits<graph_type>::edge_iterator edge_iterator;
-    typedef typename graph_traits<graph_type>::each_node_iterator each_node_iterator;
-    typedef typename graph_traits<graph_type>::out_edge_iterator out_edge_iterator;
-
+    typedef typename graph_type::node_iterator node_iterator;
+    typedef typename graph_type::edge_iterator edge_iterator;
+    typedef typename graph_type::out_edge_iterator out_edge_iterator;
     graph_type& G;
     std::queue<out_edge_iterator>& bfs_queue;
     reached_type& reached;
-    bool newly_reached;
+    bool _newly_reached;
     bfs_iterator1(graph_type& _G, std::queue<out_edge_iterator>& _bfs_queue, reached_type& _reached) : G(_G), bfs_queue(_bfs_queue), reached(_reached) { 
-      is_valid();
-      if (!bfs_queue.empty() && bfs_queue.front().is_valid()) { 
+      valid();
+      if (!bfs_queue.empty() && bfs_queue.front().valid()) { 
 	out_edge_iterator e=bfs_queue.front();
 	node_iterator w=G.head(e);
@@ -147,15 +140,15 @@
 	  bfs_queue.push(G.first_out_edge(w));
 	  reached.put(w, true);
-	  newly_reached=true;
+	  _newly_reached=true;
 	} else {
-	  newly_reached=false;
+	  _newly_reached=false;
 	}
       }
     }
     bfs_iterator1<graph_type, reached_type>& operator++() { 
-      if (!is_valid()) return *this;
+      if (!valid()) return *this;
       ++(bfs_queue.front());
-      is_valid();
-      if (!bfs_queue.empty() && bfs_queue.front().is_valid()) { 
+      valid();
+      if (!bfs_queue.empty() && bfs_queue.front().valid()) { 
 	out_edge_iterator e=bfs_queue.front();
 	node_iterator w=G.head(e);
@@ -163,17 +156,17 @@
 	  bfs_queue.push(G.first_out_edge(w));
 	  reached.put(w, true);
-	  newly_reached=true;
+	  _newly_reached=true;
 	} else {
-	  newly_reached=false;
+	  _newly_reached=false;
 	}
       }
       return *this;
     }
-    bool is_valid() { 
-      while ( !bfs_queue.empty() && !bfs_queue.front().is_valid() ) { bfs_queue.pop(); } 
+    bool valid() { 
+      while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } 
       if (bfs_queue.empty()) return false; else return true;
     }
     operator edge_iterator () { return bfs_queue.front(); }
-    bool is_newly_reached() { return newly_reached; }
+    bool newly_reached() { return _newly_reached; }
 
   };
Index: src/work/marci_graph_concept.txt
===================================================================
--- src/work/marci_graph_concept.txt	(revision 15)
+++ src/work/marci_graph_concept.txt	(revision 19)
@@ -17,5 +17,4 @@
 marci_bfs.hh	      //bfs, tejesen kiserleti
 marci_graph_demo.cc  //peldaprogi a lisas graf hasznalatahoz
-marci_graph_traits.hh //alapertelmezett graph_traits
 marci_list_graph.hh  //list_graph megvalositas
 marci_max_flow.hh     //folyam, kiserleti
@@ -132,5 +131,5 @@
 node_iterator metodusai:
 node_iterator();
-bool is_valid();
+bool valid();
 void make_invalid();
 ezek nem tagfuggvenyek:
@@ -145,5 +144,5 @@
 edge_iterator metodusai:
 edge_iterator();
-bool is_valid();
+bool valid();
 void make_invalid();
 ezek nem tagfvek:
@@ -193,6 +192,6 @@
 
 node_property_vector(graph_type&);
-void put(graph_traits<graph_type>::node_iterator, const T&);
-T get(graph_traits<graph_type>::node_iterator);
+void put(graph_type::node_iterator, const T&);
+T get(graph_type::node_iterator);
 
 Ugyanez edge_property_array-okkal
@@ -202,6 +201,6 @@
 
 edge_property_vector(graph_type&);
-void put(graph_traits<graph_type>::edge_iterator, const T&);
-get(graph_traits<graph_type>::edge_iterator);
+void put(graph_type::edge_iterator, const T&);
+get(graph_type::edge_iterator);
 
  Ennyi nem javasolas utan, meg nehany szo.
Index: src/work/marci_graph_demo.cc
===================================================================
--- src/work/marci_graph_demo.cc	(revision 12)
+++ src/work/marci_graph_demo.cc	(revision 19)
@@ -4,5 +4,4 @@
 
 #include <marci_list_graph.hh>
-#include <marci_graph_traits.hh>
 #include <marci_property_vector.hh>
 #include <marci_bfs.hh>
@@ -13,12 +12,11 @@
 int main (int, char*[])
 {
-  typedef graph_traits<list_graph>::node_iterator node_iterator;
-  typedef graph_traits<list_graph>::edge_iterator edge_iterator;
-  typedef graph_traits<list_graph>::each_node_iterator each_node_iterator;
-  typedef graph_traits<list_graph>::each_edge_iterator each_edge_iterator;
-  typedef graph_traits<list_graph>::out_edge_iterator out_edge_iterator;
-  typedef graph_traits<list_graph>::in_edge_iterator in_edge_iterator;
-  typedef graph_traits<list_graph>::sym_edge_iterator sym_edge_iterator;
-
+  typedef list_graph::node_iterator node_iterator;
+  typedef list_graph::edge_iterator edge_iterator;
+  typedef list_graph::each_node_iterator each_node_iterator;
+  typedef list_graph::each_edge_iterator each_edge_iterator;
+  typedef list_graph::out_edge_iterator out_edge_iterator;
+  typedef list_graph::in_edge_iterator in_edge_iterator;
+  typedef list_graph::sym_edge_iterator sym_edge_iterator;
   list_graph G;
   std::vector<node_iterator> vector_of_node_iterators;
@@ -32,8 +30,8 @@
   std::cout << "number of nodes: " << number_of(G.first_node()) << std::endl;
 
-  for(each_node_iterator i=G.first_node(); i.is_valid(); ++i) {
+  for(each_node_iterator i=G.first_node(); i.valid(); ++i) {
     std::cout << "node " << G.id(i) << std::endl;
     std::cout << " outdegree (out_edge_iterator): " << number_of(G.first_out_edge(i)) << " "; 
-    for(out_edge_iterator j=G.first_out_edge(i); j.is_valid(); ++j) { 
+    for(out_edge_iterator j=G.first_out_edge(i); j.valid(); ++j) { 
       std::cout << "(" << G.id(G.tail(j)) << "--" << G.id(j) << "->" << G.id(G.head(j)) << ") ";
     }
@@ -41,25 +39,25 @@
 
     std::cout<< " ";
-    for(out_edge_iterator j=G.first_out_edge(i); j.is_valid(); ++j) { 
+    for(out_edge_iterator j=G.first_out_edge(i); j.valid(); ++j) { 
       std::cout << G.a_node(j) << "->" << G.b_node(j) << " "; } 
     std::cout<<std::endl;
 
     std::cout << " indegree: (in_edge_oterator) " << number_of(G.first_in_edge(i)) << " ";
-    for(in_edge_iterator j=G.first_in_edge(i); j.is_valid(); ++j) { 
+    for(in_edge_iterator j=G.first_in_edge(i); j.valid(); ++j) { 
       std::cout << j << " "; } 
     std::cout << std::endl;
 
     std::cout<< " ";
-    for(in_edge_iterator j=G.first_in_edge(i); j.is_valid(); ++j) { 
+    for(in_edge_iterator j=G.first_in_edge(i); j.valid(); ++j) { 
       std::cout << G.a_node(j) << "->" << G.b_node(j) << " "; } 
     std::cout<<std::endl;
 
     std::cout << " degree: (sym_edge_iterator) " << number_of(G.first_sym_edge(i)) << " ";
-    for(sym_edge_iterator j=G.first_sym_edge(i); j.is_valid(); ++j) { 
+    for(sym_edge_iterator j=G.first_sym_edge(i); j.valid(); ++j) { 
       std::cout << j << " "; } 
     std::cout<<std::endl;
 
     std::cout<< " ";
-    for(sym_edge_iterator j=G.first_sym_edge(i); j.is_valid(); ++j) { 
+    for(sym_edge_iterator j=G.first_sym_edge(i); j.valid(); ++j) { 
       std::cout << G.a_node(j) << "->" << G.b_node(j) << " "; } 
     std::cout<<std::endl;
@@ -67,5 +65,5 @@
 
   std::cout << "all edges: ";
-  for(each_edge_iterator i=G.first_edge(); i.is_valid(); ++i) {
+  for(each_edge_iterator i=G.first_edge(); i.valid(); ++i) {
     std::cout << i << " ";
   }
@@ -83,5 +81,5 @@
   my_property_vector.put(vector_of_node_iterators[7], 1978);
   std::cout << "some node property values..." << std::endl;
-  for(each_node_iterator i=G.first_node(); i.is_valid(); ++i) {
+  for(each_node_iterator i=G.first_node(); i.valid(); ++i) {
     std::cout << my_property_vector.get(i) << std::endl;
   }
@@ -89,5 +87,5 @@
   int _ii=1;
   edge_property_vector<list_graph, int> my_edge_property(G);
-  for(each_edge_iterator i=G.first_edge(); i.is_valid(); ++i) {
+  for(each_edge_iterator i=G.first_edge(); i.valid(); ++i) {
     my_edge_property.put(i, _i);
     _i*=_ii; ++_ii;
@@ -95,5 +93,5 @@
 
   std::cout << "node and edge property values on the tails and heads of edges..." << std::endl;
-  for(each_edge_iterator j=G.first_edge(); j.is_valid(); ++j) {
+  for(each_edge_iterator j=G.first_edge(); j.valid(); ++j) {
     std::cout << my_property_vector.get(G.tail(j)) << "--" << my_edge_property.get(j) << "-->" << my_property_vector.get(G.head(j)) << " ";
   }
@@ -102,6 +100,6 @@
   //std::cout << "the same for inedges of the nodes..." << std::endl;
   //k=0;
-  //for(each_node_iterator i=G.first_node(); i.is_valid(); ++i) {
-  //  for(in_edge_iterator j=G.first_in_edge(i); j.is_valid(); ++j) {
+  //for(each_node_iterator i=G.first_node(); i.valid(); ++i) {
+  //  for(in_edge_iterator j=G.first_in_edge(i); j.valid(); ++j) {
   //    std::cout << my_property_vector.get(G.tail(j)) << "-->" << my_property_vector.get(G.head(j)) << " ";
   //  }
@@ -113,10 +111,10 @@
   bfs_test.run();
   std::cout << "reached: ";
-  for(each_node_iterator i=G.first_node(); i.is_valid(); ++i) {
+  for(each_node_iterator i=G.first_node(); i.valid(); ++i) {
     std::cout << bfs_test.reached.get(i) << " ";
   }
   std::cout<<std::endl;
   std::cout << "dist: ";
-  for(each_node_iterator i=G.first_node(); i.is_valid(); ++i) {
+  for(each_node_iterator i=G.first_node(); i.valid(); ++i) {
     std::cout << bfs_test.dist.get(i) << " ";
   }
@@ -168,11 +166,11 @@
   std::cout << "on directed graph graph" << std::endl; //<< flow_test;
   std::cout << "names and capacity values" << std::endl; 
-  for(each_node_iterator i=flow_test.first_node(); i.is_valid(); ++i) { 
+  for(each_node_iterator i=flow_test.first_node(); i.valid(); ++i) { 
     std::cout << node_name.get(i) << ": ";
     std::cout << "out edges: ";
-    for(out_edge_iterator j=flow_test.first_out_edge(i); j.is_valid(); ++j) 
+    for(out_edge_iterator j=flow_test.first_out_edge(i); j.valid(); ++j) 
       std::cout << node_name.get(flow_test.tail(j)) << "-"<< cap.get(j) << "->" << node_name.get(flow_test.head(j)) << " ";
     std::cout << "in edges: ";
-    for(in_edge_iterator j=flow_test.first_in_edge(i); j.is_valid(); ++j) 
+    for(in_edge_iterator j=flow_test.first_in_edge(i); j.valid(); ++j) 
       std::cout << node_name.get(flow_test.tail(j)) << "-"<< cap.get(j) << "->" << node_name.get(flow_test.head(j)) << " ";
     std::cout << std::endl;
@@ -180,5 +178,5 @@
 
   
-  //for(each_node_iterator i=flow_test.first_node(); i.is_valid(); ++i) { 
+  //for(each_node_iterator i=flow_test.first_node(); i.valid(); ++i) { 
   //  std::cout << i << " ";
   //}
Index: src/work/marci_list_graph.hh
===================================================================
--- src/work/marci_list_graph.hh	(revision 16)
+++ src/work/marci_list_graph.hh	(revision 19)
@@ -20,4 +20,6 @@
     int node_id;
     int edge_id;
+    int _node_num;
+    int _edge_num;
 
     node_item* _first_node;
@@ -81,4 +83,5 @@
       _last_node=p;
       if (!_first_node) _first_node=p;
+      ++_node_num;
       return p;
     }
@@ -99,4 +102,5 @@
       _head->_last_in_edge=e;
       if (!_head->_first_in_edge) { _head->_first_in_edge=e; } 
+      ++_edge_num;
       return e;
     }
@@ -106,6 +110,9 @@
     /* default constructor */
 
-    list_graph() : node_id(0), edge_id(0), _first_node(0), _last_node(0) { }
-    
+    list_graph() : node_id(0), edge_id(0), _node_num(0), _edge_num(0), _first_node(0), _last_node(0) { }
+    
+    int node_num() { return _node_num; }
+    int edge_num() { return _edge_num; }
+
     /* functions to construct iterators from the graph, or from each other */
 
@@ -210,5 +217,5 @@
       node_iterator() : node(0) { }
       node_iterator(node_item* _node) : node(_node) { }
-      bool is_valid() { return (node!=0); }
+      bool valid() { return (node!=0); }
       void make_invalid() { node=0; }
       friend bool operator==(const node_iterator& u, const node_iterator& v) { 
@@ -240,5 +247,5 @@
       edge_iterator() : edge(0) { }
       edge_iterator(edge_item* _edge) : edge(_edge) { }
-      bool is_valid() { return (edge!=0); }
+      bool valid() { return (edge!=0); }
       void make_invalid() { edge=0; }
       friend bool operator==(const edge_iterator& u, const edge_iterator& v) { 
Index: src/work/marci_makefile
===================================================================
--- src/work/marci_makefile	(revision 9)
+++ src/work/marci_makefile	(revision 19)
@@ -1,5 +1,5 @@
-CCFLAGS = -Wall -ansi
-CC = /opt/experimental/bin/g++
+CXXFLAGS = -Wall -ansi -I.
+CXX = g++-3.0
 
-marci_graph_demo: marci_graph_demo.cc marci_graph_traits.hh marci_list_graph.hh marci_property_vector.hh marci_bfs.hh marci_max_flow.hh
-	$(CC) $(CCFLAGS) -I. marci_graph_demo.cc -o marci_graph_demo 
+marci_graph_demo: marci_graph_demo.cc marci_list_graph.hh marci_property_vector.hh marci_bfs.hh marci_max_flow.hh
+	$(CXX) $(CXXFLAGS) marci_graph_demo.cc -o marci_graph_demo 
Index: src/work/marci_max_flow.hh
===================================================================
--- src/work/marci_max_flow.hh	(revision 17)
+++ src/work/marci_max_flow.hh	(revision 19)
@@ -4,5 +4,4 @@
 #include <algorithm>
 
-#include <marci_graph_traits.hh>
 #include <marci_property_vector.hh>
 #include <marci_bfs.hh>
@@ -12,9 +11,7 @@
   template<typename graph_type, typename T>
   class res_graph_type { 
-    typedef typename graph_traits<graph_type>::node_iterator node_iterator;
-    typedef typename graph_traits<graph_type>::edge_iterator edge_iterator;
-    typedef typename graph_traits<graph_type>::each_node_iterator each_node_iterator;
-    typedef typename graph_traits<graph_type>::sym_edge_iterator sym_edge_iterator;
-
+    typedef typename graph_type::node_iterator node_iterator;
+    typedef typename graph_type::each_node_iterator each_node_iterator;
+    typedef typename graph_type::sym_edge_iterator old_sym_edge_iterator;
     graph_type& G;
     edge_property_vector<graph_type, T>& flow;
@@ -23,11 +20,11 @@
     res_graph_type(graph_type& _G, edge_property_vector<graph_type, T>& _flow, edge_property_vector<graph_type, T>& _capacity) : G(_G), flow(_flow), capacity(_capacity) { }
 
-    class res_edge_it {
+    class edge_iterator {
       friend class res_graph_type<graph_type, T>;
     protected:
       res_graph_type<graph_type, T>* resG;
-      sym_edge_iterator sym;
+      old_sym_edge_iterator sym;
     public:
-      res_edge_it() { }
+      edge_iterator() { }
       //bool is_free() {  
       //if (resG->G.a_node(sym)==resG->G.tail(sym)) { 
@@ -44,5 +41,5 @@
 	}
       }
-      bool is_valid() { return sym.is_valid(); }
+      bool valid() { return sym.valid(); }
       void make_invalid() { sym.make_invalid(); }
       void augment(T a) {
@@ -55,21 +52,21 @@
     };
 
-    class res_out_edge_it : public res_edge_it {
+    class out_edge_iterator : public edge_iterator {
     public:
-      res_out_edge_it() { }
-      res_out_edge_it(res_graph_type<graph_type, T>& _resG, const node_iterator& v) { 
+      out_edge_iterator() { }
+      out_edge_iterator(res_graph_type<graph_type, T>& _resG, const node_iterator& v) { 
       	resG=&_resG;
 	sym=resG->G.first_sym_edge(v);
-	while( sym.is_valid() && !(free()>0) ) { ++sym; }
+	while( sym.valid() && !(free()>0) ) { ++sym; }
       }
-      res_out_edge_it& operator++() { 
+      out_edge_iterator& operator++() { 
 	++sym; 
-	while( sym.is_valid() && !(free()>0) ) { ++sym; }
+	while( sym.valid() && !(free()>0) ) { ++sym; }
 	return *this; 
       }
     };
 
-    res_out_edge_it first_out_edge(const node_iterator& v) {
-      return res_out_edge_it(*this, v);
+    out_edge_iterator first_out_edge(const node_iterator& v) {
+      return out_edge_iterator(*this, v);
     }
 
@@ -78,31 +75,20 @@
     }
 
-    node_iterator tail(const res_edge_it& e) { return G.a_node(e.sym); }
-    node_iterator head(const res_edge_it& e) { return G.b_node(e.sym); }
+    node_iterator tail(const edge_iterator& e) { return G.a_node(e.sym); }
+    node_iterator head(const edge_iterator& e) { return G.b_node(e.sym); }
 
     int id(const node_iterator& v) { return G.id(v); }
 
     //node_iterator invalid_node() { return G.invalid_node(); }
-    //res_edge_it invalid_edge() { res_edge_it n; n.sym=G.invalid_sym_edge(); return n; }
-    
-  };
-
-  template <typename graph_type, typename T>
-  struct graph_traits< res_graph_type<graph_type, T> > {
-    typedef typename graph_traits<graph_type>::node_iterator node_iterator;
-    typedef typename res_graph_type<graph_type, T>::res_edge_it edge_iterator;
-    typedef typename graph_traits<graph_type>::each_node_iterator each_node_iterator;
-    typedef typename res_graph_type<graph_type, T>::res_out_edge_it out_edge_iterator;
+    //res_edge_it invalid_edge() { res_edge_it n; n.sym=G.invalid_sym_edge(); return n; } 
   };
 
   template <typename graph_type, typename T>
   struct max_flow_type {
-    
-    typedef typename graph_traits<graph_type>::node_iterator node_iterator;
-    typedef typename graph_traits<graph_type>::edge_iterator edge_iterator;
-    typedef typename graph_traits<graph_type>::each_node_iterator each_node_iterator;
-    typedef typename graph_traits<graph_type>::out_edge_iterator out_edge_iterator;
-    typedef typename graph_traits<graph_type>::in_edge_iterator in_edge_iterator;
-
+    typedef typename graph_type::node_iterator node_iterator;
+    typedef typename graph_type::edge_iterator edge_iterator;
+    typedef typename graph_type::each_node_iterator each_node_iterator;
+    typedef typename graph_type::out_edge_iterator out_edge_iterator;
+    typedef typename graph_type::in_edge_iterator in_edge_iterator;
     graph_type& G;
     node_iterator s;
@@ -112,6 +98,6 @@
 
     max_flow_type(graph_type& _G, node_iterator _s, node_iterator _t, edge_property_vector<graph_type, T>& _capacity) : G(_G), s(_s), t(_t), flow(_G), capacity(_capacity) { 
-      for(each_node_iterator i=G.first_node(); i.is_valid(); ++i) 
-	for(out_edge_iterator j=G.first_out_edge(i); j.is_valid(); ++j) 
+      for(each_node_iterator i=G.first_node(); i.valid(); ++i) 
+	for(out_edge_iterator j=G.first_out_edge(i); j.valid(); ++j) 
 	  flow.put(j, 0);
     }
@@ -124,5 +110,5 @@
 	augment=false;
 
-	typedef std::queue<graph_traits<aug_graph_type>::out_edge_iterator> bfs_queue_type;
+	typedef std::queue<aug_graph_type::out_edge_iterator> bfs_queue_type;
 	bfs_queue_type bfs_queue;
 	bfs_queue.push(res_graph.first_out_edge(s));
@@ -135,7 +121,7 @@
 	res_bfs(res_graph, bfs_queue, reached);
 
-	typedef node_property_vector<aug_graph_type, graph_traits<aug_graph_type>::edge_iterator> pred_type;
+	typedef node_property_vector<aug_graph_type, aug_graph_type::edge_iterator> pred_type;
 	pred_type pred(res_graph);
-	graph_traits<aug_graph_type>::edge_iterator a; 
+	aug_graph_type::edge_iterator a; 
 	a.make_invalid();
 	pred.put(s, a);
@@ -145,8 +131,8 @@
 	
 	//searching for augmenting path
-	while ( res_bfs.is_valid() ) { 
+	while ( res_bfs.valid() ) { 
 	  //std::cout<<"KULSO ciklus itt jar: "<<G.id(res_graph.tail(res_bfs))<<"->"<<G.id(res_graph.head(res_bfs))<<std::endl;
-	  if (res_bfs.is_newly_reached()) {
-	    graph_traits<aug_graph_type>::edge_iterator e;
+	  if (res_bfs.newly_reached()) {
+	    aug_graph_type::edge_iterator e;
 	    e=res_bfs;
 	    node_iterator v=res_graph.tail(e);
@@ -154,5 +140,5 @@
 	    //std::cout<<G.id(v)<<"->"<<G.id(w)<<", "<<G.id(w)<<" is newly reached";
 	    pred.put(w, e);
-	    if (pred.get(v).is_valid()) {
+	    if (pred.get(v).valid()) {
 	      free.put(w, std::min(free.get(v), e.free()));
 	      //std::cout <<" nem elso csucs: ";
@@ -174,6 +160,6 @@
 	  T augment_value=free.get(t);
 	  std::cout<<"augmentation: ";
-	  while (pred.get(n).is_valid()) { 
-	    graph_traits<aug_graph_type>::edge_iterator e=pred.get(n);
+	  while (pred.get(n).valid()) { 
+	    aug_graph_type::edge_iterator e=pred.get(n);
 	    e.augment(augment_value); 
 	    std::cout<<"("<<res_graph.tail(e)<< "->"<<res_graph.head(e)<<") ";
@@ -184,5 +170,5 @@
 
 	std::cout << "actual flow: "<< std::endl;
-	for(graph_traits<graph_type>::each_edge_iterator e=G.first_edge(); e.is_valid(); ++e) { 
+	for(typename graph_type::each_edge_iterator e=G.first_edge(); e.valid(); ++e) { 
 	  std::cout<<"("<<G.tail(e)<< "-"<<flow.get(e)<<"->"<<G.head(e)<<") ";
 	}
Index: src/work/marci_property_vector.hh
===================================================================
--- src/work/marci_property_vector.hh	(revision 9)
+++ src/work/marci_property_vector.hh	(revision 19)
@@ -3,6 +3,4 @@
 
 #include <vector>
-
-#include <marci_graph_traits.hh>
 
 namespace marci {
@@ -11,5 +9,5 @@
   int number_of(iterator _it) { 
     int i=0;
-    for( ; _it.is_valid(); ++_it) { ++i; } 
+    for( ; _it.valid(); ++_it) { ++i; } 
     return i;
   }
@@ -17,6 +15,6 @@
   template <typename graph_type, typename T>
   class node_property_vector {
-    typedef typename graph_traits<graph_type>::node_iterator node_iterator;
-    typedef typename graph_traits<graph_type>::each_node_iterator each_node_iterator;
+    typedef typename list_graph::node_iterator node_iterator;
+    typedef typename list_graph::each_node_iterator each_node_iterator;
     graph_type& G; 
     std::vector<T> container;
@@ -24,9 +22,9 @@
     node_property_vector(graph_type& _G) : G(_G) {
       int i=0;
-      for(each_node_iterator it=G.first_node(); it.is_valid(); ++it) ++i;
+      for(each_node_iterator it=G.first_node(); it.valid(); ++it) ++i;
       container.resize(i); 
     }
     node_property_vector(graph_type& _G, T a) : G(_G) {
-      for(each_node_iterator it=G.first_node(); it.is_valid(); ++it) { container.push_back(a); }
+      for(each_node_iterator it=G.first_node(); it.valid(); ++it) { container.push_back(a); }
     }
     void put(node_iterator nit, const T& a) { container[G.id(nit)]=a; }
@@ -36,6 +34,6 @@
   template <typename graph_type, typename T>
   class edge_property_vector {
-    typedef typename graph_traits<graph_type>::edge_iterator edge_iterator;
-    typedef typename graph_traits<graph_type>::each_edge_iterator each_edge_iterator;
+    typedef typename graph_type::edge_iterator edge_iterator;
+    typedef typename graph_type::each_edge_iterator each_edge_iterator;
     graph_type& G; 
     std::vector<T> container;
@@ -43,9 +41,9 @@
     edge_property_vector(graph_type& _G) : G(_G) {
       int i=0;
-      for(each_edge_iterator it=G.first_edge(); it.is_valid(); ++it) ++i;
+      for(each_edge_iterator it=G.first_edge(); it.valid(); ++it) ++i;
       container.resize(i); 
     }
     edge_property_vector(graph_type& _G, T a) : G(_G) {
-      for(each_edge_iterator it=G.first_edge(); it.is_valid(); ++it) { 
+      for(each_edge_iterator it=G.first_edge(); it.valid(); ++it) { 
 	container.push_back(a); 
       }
