Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt	(revision 1066)
+++ CMakeLists.txt	(revision 1017)
@@ -62,62 +62,7 @@
 FIND_PACKAGE(Doxygen)
 FIND_PACKAGE(Ghostscript)
-
-SET(LEMON_ENABLE_GLPK YES CACHE STRING "Enable GLPK solver backend.")
-SET(LEMON_ENABLE_ILOG YES CACHE STRING "Enable ILOG (CPLEX) solver backend.")
-SET(LEMON_ENABLE_COIN YES CACHE STRING "Enable COIN solver backend.")
-
-IF(LEMON_ENABLE_GLPK) 
-  FIND_PACKAGE(GLPK 4.33)
-ENDIF(LEMON_ENABLE_GLPK)
-IF(LEMON_ENABLE_ILOG)
-  FIND_PACKAGE(ILOG)
-ENDIF(LEMON_ENABLE_ILOG)
-IF(LEMON_ENABLE_COIN)
-  FIND_PACKAGE(COIN)
-ENDIF(LEMON_ENABLE_COIN)
-
-IF(GLPK_FOUND)
-  SET(LEMON_HAVE_LP TRUE)
-  SET(LEMON_HAVE_MIP TRUE)
-  SET(LEMON_HAVE_GLPK TRUE)
-ENDIF(GLPK_FOUND)
-IF(ILOG_FOUND)
-  SET(LEMON_HAVE_LP TRUE)
-  SET(LEMON_HAVE_MIP TRUE)
-  SET(LEMON_HAVE_CPLEX TRUE)
-ENDIF(ILOG_FOUND)
-IF(COIN_FOUND)
-  SET(LEMON_HAVE_LP TRUE)
-  SET(LEMON_HAVE_MIP TRUE)
-  SET(LEMON_HAVE_CLP TRUE)
-  SET(LEMON_HAVE_CBC TRUE)
-ENDIF(COIN_FOUND)
-
-IF(ILOG_FOUND)
-  SET(DEFAULT_LP "CPLEX")
-  SET(DEFAULT_MIP "CPLEX")
-ELSEIF(COIN_FOUND)
-  SET(DEFAULT_LP "CLP")
-  SET(DEFAULT_MIP "CBC")
-ELSEIF(GLPK_FOUND)
-  SET(DEFAULT_LP "GLPK")
-  SET(DEFAULT_MIP "GLPK")
-ENDIF()
-
-IF(NOT LEMON_DEFAULT_LP OR
-    (NOT ILOG_FOUND AND (LEMON_DEFAULT_LP STREQUAL "CPLEX")) OR
-    (NOT COIN_FOUND AND (LEMON_DEFAULT_LP STREQUAL "CLP")) OR
-    (NOT GLPK_FOUND AND (LEMON_DEFAULT_LP STREQUAL "GLPK")))
-  SET(LEMON_DEFAULT_LP ${DEFAULT_LP} CACHE STRING
-    "Default LP solver backend (GLPK, CPLEX or CLP)" FORCE)
-ENDIF()
-IF(NOT LEMON_DEFAULT_MIP OR
-    (NOT ILOG_FOUND AND (LEMON_DEFAULT_MIP STREQUAL "CPLEX")) OR
-    (NOT COIN_FOUND AND (LEMON_DEFAULT_MIP STREQUAL "CBC")) OR
-    (NOT GLPK_FOUND AND (LEMON_DEFAULT_MIP STREQUAL "GLPK")))
-  SET(LEMON_DEFAULT_MIP ${DEFAULT_MIP} CACHE STRING
-    "Default MIP solver backend (GLPK, CPLEX or CBC)" FORCE)
-ENDIF()
-
+FIND_PACKAGE(GLPK 4.33)
+FIND_PACKAGE(CPLEX)
+FIND_PACKAGE(COIN)
 
 IF(DEFINED ENV{LEMON_CXX_WARNING})
Index: INSTALL
===================================================================
--- INSTALL	(revision 1065)
+++ INSTALL	(revision 1040)
@@ -135,27 +135,9 @@
 
   
--DLEMON_ENABLE_GLPK=NO
--DLEMON_ENABLE_COIN=NO
--DLEMON_ENABLE_ILOG=NO
-
-  Enable optional third party libraries. They are all enabled by default. 
-
--DLEMON_DEFAULT_LP=GLPK
-
-  Sets the default LP solver backend. The supported values are
-  CPLEX, CLP and GLPK. By default, it is set to the first one which
-  is enabled and succesfully discovered.
-
--DLEMON_DEFAULT_MIP=GLPK
-
-  Sets the default MIP solver backend. The supported values are
-  CPLEX, CBC and GLPK. By default, it is set to the first one which
-  is enabled and succesfully discovered.
-
 -DGLPK_ROOT_DIR=DIRECTORY
 -DCOIN_ROOT_DIR=DIRECTORY
--DILOG_ROOT_DIR=DIRECTORY
+-DCPLEX_ROOT_DIR=DIRECTORY
 
-  Root directory prefixes of optional third party libraries.
+  Install root directory prefixes of optional third party libraries.
 
 Makefile Variables
Index: cmake/FindCOIN.cmake
===================================================================
--- cmake/FindCOIN.cmake	(revision 1064)
+++ cmake/FindCOIN.cmake	(revision 973)
@@ -109,2 +109,9 @@
   COIN_BZ2_LIBRARY
 )
+
+IF(COIN_FOUND)
+  SET(LEMON_HAVE_LP TRUE)
+  SET(LEMON_HAVE_MIP TRUE)
+  SET(LEMON_HAVE_CLP TRUE)
+  SET(LEMON_HAVE_CBC TRUE)
+ENDIF(COIN_FOUND)
Index: cmake/FindCPLEX.cmake
===================================================================
--- cmake/FindCPLEX.cmake	(revision 972)
+++ cmake/FindCPLEX.cmake	(revision 972)
@@ -0,0 +1,40 @@
+SET(CPLEX_ROOT_DIR "" CACHE PATH "CPLEX root directory")
+
+FIND_PATH(CPLEX_INCLUDE_DIR
+  ilcplex/cplex.h
+  PATHS "C:/ILOG/CPLEX/include"
+  PATHS "/opt/ilog/cplex/include"
+  HINTS ${CPLEX_ROOT_DIR}/include
+)
+FIND_LIBRARY(CPLEX_LIBRARY
+  cplex
+  PATHS "C:/ILOG/CPLEX/lib/msvc7/stat_mda"
+  PATHS "/opt/ilog/cplex/bin"
+  HINTS ${CPLEX_ROOT_DIR}/bin
+  HINTS ${CPLEX_ROOT_DIR}/lib
+)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPLEX DEFAULT_MSG CPLEX_LIBRARY CPLEX_INCLUDE_DIR)
+
+FIND_PATH(CPLEX_BIN_DIR
+  cplex.dll
+  PATHS "C:/ILOG/CPLEX/bin/x86_win32"
+  HINTS ${CPLEX_ROOT_DIR}/bin
+)
+
+IF(CPLEX_FOUND)
+  SET(CPLEX_INCLUDE_DIRS ${CPLEX_INCLUDE_DIR})
+  SET(CPLEX_LIBRARIES ${CPLEX_LIBRARY})
+  IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+    SET(CPLEX_LIBRARIES "${CPLEX_LIBRARIES};m;pthread")
+  ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ENDIF(CPLEX_FOUND)
+
+MARK_AS_ADVANCED(CPLEX_LIBRARY CPLEX_INCLUDE_DIR CPLEX_BIN_DIR)
+
+IF(CPLEX_FOUND)
+  SET(LEMON_HAVE_LP TRUE)
+  SET(LEMON_HAVE_MIP TRUE)
+  SET(LEMON_HAVE_CPLEX TRUE)
+ENDIF(CPLEX_FOUND)
Index: cmake/FindGLPK.cmake
===================================================================
--- cmake/FindGLPK.cmake	(revision 1064)
+++ cmake/FindGLPK.cmake	(revision 638)
@@ -54,2 +54,8 @@
 
 MARK_AS_ADVANCED(GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_BIN_DIR)
+
+IF(GLPK_FOUND)
+  SET(LEMON_HAVE_LP TRUE)
+  SET(LEMON_HAVE_MIP TRUE)
+  SET(LEMON_HAVE_GLPK TRUE)
+ENDIF(GLPK_FOUND)
Index: ake/FindILOG.cmake
===================================================================
--- cmake/FindILOG.cmake	(revision 1064)
+++ 	(revision )
@@ -1,102 +1,0 @@
-FIND_PATH(ILOG_ROOT_DIR
-  NAMES cplex
-  DOC "CPLEX STUDIO root directory"
-  PATHS /opt/ibm/ILOG /usr/local/ibm/ILOG /usr/local/ILOG /usr/local/ilog
-  PATHS "$ENV{HOME}/ILOG" "$ENV{HOME}/.local/ILOG"
-  PATHS "$ENV{HOME}/ibm/ILOG" "$ENV{HOME}/.local/ibm/ILOG"
-  PATHS "C:/Program Files/IBM/ILOG" 
-  PATH_SUFFIXES "CPLEX_Studio126" "CPLEX_Studio125"
-  "CPLEX_Studio124" "CPLEX_Studio123" "CPLEX_Studio122"
-  NO_DEFAULT_PATH
-)
-
-IF(WIN32)
-  IF(MSVC_VERSION STREQUAL "1400")
-    SET(ILOG_WIN_COMPILER "windows_vs2005")
-  ELSEIF(MSVC_VERSION STREQUAL "1500")
-    SET(ILOG_WIN_COMPILER "windows_vs2008")
-  ELSEIF(MSVC_VERSION STREQUAL "1600")
-    SET(ILOG_WIN_COMPILER "windows_vs2010")
-  ELSE()
-    SET(ILOG_WIN_COMPILER "windows_vs2008")
-  ENDIF()
-  IF(CMAKE_CL_64)
-    SET(ILOG_WIN_COMPILER "x64_${ILOG_WIN_COMPILER}")
-    SET(ILOG_WIN_PLATFORM "x64_win32")
-  ELSE()
-    SET(ILOG_WIN_COMPILER "x86_${ILOG_WIN_COMPILER}")
-    SET(ILOG_WIN_PLATFORM "x86_win32")
-  ENDIF()
-ENDIF()
-
-FIND_PATH(ILOG_CPLEX_ROOT_DIR
-  NAMES include/ilcplex
-  HINTS ${ILOG_ROOT_DIR}/cplex ${ILOG_ROOT_DIR}/cplex121
-  ${ILOG_ROOT_DIR}/cplex122 ${ILOG_ROOT_DIR}/cplex123
-  DOC "CPLEX root directory"
-  NO_DEFAULT_PATH
-)
-
-FIND_PATH(ILOG_CONCERT_ROOT_DIR
-  NAMES include/ilconcert
-  HINTS ${ILOG_ROOT_DIR}/concert ${ILOG_ROOT_DIR}/concert29
-  DOC "CONCERT root directory"
-  NO_DEFAULT_PATH
-)
-
-FIND_PATH(ILOG_CPLEX_INCLUDE_DIR
-  ilcplex/cplex.h
-  HINTS ${ILOG_CPLEX_ROOT_DIR}/include
-  NO_DEFAULT_PATH
-)
-
-FIND_PATH(ILOG_CONCERT_INCLUDE_DIR
-  ilconcert/ilobasic.h
-  HINTS ${ILOG_CONCERT_ROOT_DIR}/include
-  NO_DEFAULT_PATH
-)
-
-FIND_LIBRARY(ILOG_CPLEX_LIBRARY
-  cplex cplex121 cplex122 cplex123 cplex124
-  HINTS ${ILOG_CPLEX_ROOT_DIR}/lib/x86_sles10_4.1/static_pic
-  ${ILOG_CPLEX_ROOT_DIR}/lib/x86-64_sles10_4.1/static_pic
-  ${ILOG_CPLEX_ROOT_DIR}/lib/x86_debian4.0_4.1/static_pic
-  ${ILOG_CPLEX_ROOT_DIR}/lib/x86-64_debian4.0_4.1/static_pic
-  ${ILOG_CPLEX_ROOT_DIR}/lib/${ILOG_WIN_COMPILER}/stat_mda
-  NO_DEFAULT_PATH
-  )
-
-FIND_LIBRARY(ILOG_CONCERT_LIBRARY
-  concert
-  HINTS ${ILOG_CONCERT_ROOT_DIR}/lib/x86_sles10_4.1/static_pic
-  ${ILOG_CONCERT_ROOT_DIR}/lib/x86-64_sles10_4.1/static_pic
-  ${ILOG_CONCERT_ROOT_DIR}/lib/x86_debian4.0_4.1/static_pic
-  ${ILOG_CONCERT_ROOT_DIR}/lib/x86-64_debian4.0_4.1/static_pic
-  ${ILOG_CONCERT_ROOT_DIR}/lib/${ILOG_WIN_COMPILER}/stat_mda
-  NO_DEFAULT_PATH
-  )
-
-FIND_FILE(ILOG_CPLEX_DLL
-  cplex121.dll cplex122.dll cplex123.dll cplex124.dll
-  HINTS ${ILOG_CPLEX_ROOT_DIR}/bin/${ILOG_WIN_PLATFORM}
-  NO_DEFAULT_PATH
-  )
-
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(ILOG
-  DEFAULT_MSG ILOG_CPLEX_LIBRARY ILOG_CPLEX_INCLUDE_DIR
-  )
-
-IF(ILOG_FOUND)
-  SET(ILOG_INCLUDE_DIRS ${ILOG_CPLEX_INCLUDE_DIR} ${ILOG_CONCERT_INCLUDE_DIR})
-  SET(ILOG_LIBRARIES ${ILOG_CPLEX_LIBRARY} ${ILOG_CONCERT_LIBRARY})
-  IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-    # SET(CPLEX_LIBRARIES "${CPLEX_LIBRARIES};m;pthread")
-    SET(ILOG_LIBRARIES ${ILOG_LIBRARIES} "m" "pthread")
-  ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-ENDIF(ILOG_FOUND)
-
-MARK_AS_ADVANCED(
-  ILOG_CPLEX_LIBRARY ILOG_CPLEX_INCLUDE_DIR ILOG_CPLEX_DLL
-  ILOG_CONCERT_LIBRARY ILOG_CONCERT_INCLUDE_DIR ILOG_CONCERT_DLL
-  )
Index: doc/CMakeLists.txt
===================================================================
--- doc/CMakeLists.txt	(revision 1053)
+++ doc/CMakeLists.txt	(revision 1041)
@@ -35,21 +35,21 @@
     COMMAND ${CMAKE_COMMAND} -E remove_directory gen-images
     COMMAND ${CMAKE_COMMAND} -E make_directory gen-images
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r20 -sOutputFile=gen-images/grid_graph.png ${CMAKE_CURRENT_SOURCE_DIR}/images/grid_graph.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r32 -sOutputFile=gen-images/adaptors2.png ${CMAKE_CURRENT_SOURCE_DIR}/images/adaptors2.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r32 -sOutputFile=gen-images/connected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/connected_components.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r32 -sOutputFile=gen-images/strongly_connected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/strongly_connected_components.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r32 -sOutputFile=gen-images/node_biconnected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/node_biconnected_components.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r32 -sOutputFile=gen-images/edge_biconnected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/edge_biconnected_components.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r32 -sOutputFile=gen-images/bipartite_partitions.png ${CMAKE_CURRENT_SOURCE_DIR}/images/bipartite_partitions.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r24 -sOutputFile=gen-images/matching.png ${CMAKE_CURRENT_SOURCE_DIR}/images/matching.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r24 -sOutputFile=gen-images/bipartite_matching.png ${CMAKE_CURRENT_SOURCE_DIR}/images/bipartite_matching.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r40 -sOutputFile=gen-images/planar.png ${CMAKE_CURRENT_SOURCE_DIR}/images/planar.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r24 -sOutputFile=gen-images/tsp.png ${CMAKE_CURRENT_SOURCE_DIR}/images/tsp.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r8 -sOutputFile=gen-images/nodeshape_0.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_0.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r8 -sOutputFile=gen-images/nodeshape_1.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_1.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r8 -sOutputFile=gen-images/nodeshape_2.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_2.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r8 -sOutputFile=gen-images/nodeshape_3.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_3.eps
-    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r8 -sOutputFile=gen-images/nodeshape_4.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_4.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/bipartite_matching.png ${CMAKE_CURRENT_SOURCE_DIR}/images/bipartite_matching.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/bipartite_partitions.png ${CMAKE_CURRENT_SOURCE_DIR}/images/bipartite_partitions.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/connected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/connected_components.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/edge_biconnected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/edge_biconnected_components.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/grid_graph.png ${CMAKE_CURRENT_SOURCE_DIR}/images/grid_graph.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/matching.png ${CMAKE_CURRENT_SOURCE_DIR}/images/matching.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/node_biconnected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/node_biconnected_components.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/nodeshape_0.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_0.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/nodeshape_1.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_1.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/nodeshape_2.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_2.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/nodeshape_3.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_3.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/nodeshape_4.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_4.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/planar.png ${CMAKE_CURRENT_SOURCE_DIR}/images/planar.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/strongly_connected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/strongly_connected_components.eps
+    COMMAND ${GHOSTSCRIPT_EXECUTABLE} ${GHOSTSCRIPT_OPTIONS} -r18 -sOutputFile=gen-images/tsp.png ${CMAKE_CURRENT_SOURCE_DIR}/images/tsp.eps
     COMMAND ${CMAKE_COMMAND} -E remove_directory html
+    COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/scripts/bib2dox.py ${CMAKE_CURRENT_SOURCE_DIR}/references.bib >references.dox
     COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
Index: doc/Doxyfile.in
===================================================================
--- doc/Doxyfile.in	(revision 1053)
+++ doc/Doxyfile.in	(revision 1040)
@@ -78,5 +78,4 @@
 FILE_VERSION_FILTER    = 
 LAYOUT_FILE            = "@abs_top_srcdir@/doc/DoxygenLayout.xml"
-CITE_BIB_FILES         = "@abs_top_srcdir@/doc/references.bib"
 #---------------------------------------------------------------------------
 # configuration options related to warning and progress messages
Index: doc/groups.dox
===================================================================
--- doc/groups.dox	(revision 1053)
+++ doc/groups.dox	(revision 1038)
@@ -113,12 +113,4 @@
 detailed documentation of particular adaptors.
 
-Since the adaptor classes conform to the \ref graph_concepts "graph concepts",
-an adaptor can even be applied to another one.
-The following image illustrates a situation when a \ref SubDigraph adaptor
-is applied on a digraph and \ref Undirector is applied on the subgraph.
-
-\image html adaptors2.png
-\image latex adaptors2.eps "Using graph adaptors" width=\textwidth
-
 The behavior of graph adaptors can be very different. Some of them keep
 capabilities of the original graph while in other cases this would be
@@ -318,5 +310,5 @@
 This group contains the common graph search algorithms, namely
 \e breadth-first \e search (BFS) and \e depth-first \e search (DFS)
-\cite clrs01algorithms.
+\ref clrs01algorithms.
 */
 
@@ -327,5 +319,5 @@
 
 This group contains the algorithms for finding shortest paths in digraphs
-\cite clrs01algorithms.
+\ref clrs01algorithms.
 
  - \ref Dijkstra algorithm for finding shortest paths from a source node
@@ -349,5 +341,5 @@
 
 This group contains the algorithms for finding minimum cost spanning
-trees and arborescences \cite clrs01algorithms.
+trees and arborescences \ref clrs01algorithms.
 */
 
@@ -358,5 +350,5 @@
 
 This group contains the algorithms for finding maximum flows and
-feasible circulations \cite clrs01algorithms, \cite amo93networkflows.
+feasible circulations \ref clrs01algorithms, \ref amo93networkflows.
 
 The \e maximum \e flow \e problem is to find a flow of maximum value between
@@ -374,11 +366,11 @@
 LEMON contains several algorithms for solving maximum flow problems:
 - \ref EdmondsKarp Edmonds-Karp algorithm
-  \cite edmondskarp72theoretical.
+  \ref edmondskarp72theoretical.
 - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm
-  \cite goldberg88newapproach.
+  \ref goldberg88newapproach.
 - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees
-  \cite dinic70algorithm, \cite sleator83dynamic.
+  \ref dinic70algorithm, \ref sleator83dynamic.
 - \ref GoldbergTarjan !Preflow push-relabel algorithm with dynamic trees
-  \cite goldberg88newapproach, \cite sleator83dynamic.
+  \ref goldberg88newapproach, \ref sleator83dynamic.
 
 In most cases the \ref Preflow algorithm provides the
@@ -400,18 +392,18 @@
 
 This group contains the algorithms for finding minimum cost flows and
-circulations \cite amo93networkflows. For more information about this
-problem and its dual solution, see: \ref min_cost_flow
+circulations \ref amo93networkflows. For more information about this
+problem and its dual solution, see \ref min_cost_flow
 "Minimum Cost Flow Problem".
 
 LEMON contains several algorithms for this problem.
  - \ref NetworkSimplex Primal Network Simplex algorithm with various
-   pivot strategies \cite dantzig63linearprog, \cite kellyoneill91netsimplex.
+   pivot strategies \ref dantzig63linearprog, \ref kellyoneill91netsimplex.
  - \ref CostScaling Cost Scaling algorithm based on push/augment and
-   relabel operations \cite goldberg90approximation, \cite goldberg97efficient,
-   \cite bunnagel98efficient.
+   relabel operations \ref goldberg90approximation, \ref goldberg97efficient,
+   \ref bunnagel98efficient.
  - \ref CapacityScaling Capacity Scaling algorithm based on the successive
-   shortest path method \cite edmondskarp72theoretical.
+   shortest path method \ref edmondskarp72theoretical.
  - \ref CycleCanceling Cycle-Canceling algorithms, two of which are
-   strongly polynomial \cite klein67primal, \cite goldberg89cyclecanceling.
+   strongly polynomial \ref klein67primal, \ref goldberg89cyclecanceling.
 
 In general, \ref NetworkSimplex and \ref CostScaling are the most efficient
@@ -429,9 +421,4 @@
 which is capable of handling real-valued arc costs (other numerical
 data are required to be integer).
-
-For more details about these implementations and for a comprehensive 
-experimental study, see the paper \cite KiralyKovacs12MCF.
-It also compares these codes to other publicly available
-minimum cost flow solvers.
 */
 
@@ -472,5 +459,5 @@
 
 This group contains the algorithms for finding minimum mean cycles
-\cite amo93networkflows, \cite karp78characterization.
+\ref amo93networkflows, \ref karp78characterization.
 
 The \e minimum \e mean \e cycle \e problem is to find a directed cycle
@@ -488,9 +475,9 @@
 
 LEMON contains three algorithms for solving the minimum mean cycle problem:
-- \ref KarpMmc Karp's original algorithm \cite karp78characterization.
+- \ref KarpMmc Karp's original algorithm \ref karp78characterization.
 - \ref HartmannOrlinMmc Hartmann-Orlin's algorithm, which is an improved
-  version of Karp's algorithm \cite hartmann93finding.
+  version of Karp's algorithm \ref hartmann93finding.
 - \ref HowardMmc Howard's policy iteration algorithm
-  \cite dasdan98minmeancycle, \cite dasdan04experimental.
+  \ref dasdan98minmeancycle, \ref dasdan04experimental.
 
 In practice, the \ref HowardMmc "Howard" algorithm turned out to be by far the
@@ -498,5 +485,6 @@
 time is exponential.
 Both \ref KarpMmc "Karp" and \ref HartmannOrlinMmc "Hartmann-Orlin" algorithms
-run in time O(ne) and use space O(n<sup>2</sup>+e).
+run in time O(ne) and use space O(n<sup>2</sup>+e), but the latter one is
+typically faster due to the applied early termination scheme.
 */
 
@@ -648,6 +636,6 @@
 high-level interface.
 
-The currently supported solvers are \cite glpk, \cite clp, \cite cbc,
-\cite cplex, \cite soplex.
+The currently supported solvers are \ref glpk, \ref clp, \ref cbc,
+\ref cplex, \ref soplex.
 */
 
@@ -736,6 +724,4 @@
 This group contains general \c EPS drawing methods and special
 graph exporting tools.
-
-\image html graph_to_eps.png
 */
 
Index: c/images/adaptors1.eps
===================================================================
--- doc/images/adaptors1.eps	(revision 1050)
+++ 	(revision )
@@ -1,303 +1,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: adaptors1.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 5
-%%CreationDate: Sun Feb 21 18:51:21 2010
-%%For: Peter@KOVACSPETER (PÃ©ter,U-KOVACSPETER\Peter,S-1-5-21-1774138250-1299389707-1938712334-1001)
-%%BoundingBox: 0 0 787 372
-%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
-newpath 0 372 moveto 0 0 lineto 787 0 lineto 787 372 lineto closepath clip newpath
--14.2 385.4 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
- /DrawEllipse {
-	/endangle exch def
-	/startangle exch def
-	/yrad exch def
-	/xrad exch def
-	/y exch def
-	/x exch def
-	/savematrix mtrx currentmatrix def
-	x y tr xrad yrad sc 0 0 1 startangle endangle arc
-	closepath
-	savematrix setmatrix
-	} def
-
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-10 setmiterlimit
-0 slj 0 slc
- 0.06299 0.06299 sc
-%
-% Fig objects follow
-%
-% 
-% here starts figure with depth 60
-% Polyline
-0 slj
-0 slc
-15.000 slw
-gs  clippath
-6319 5229 m 6442 5564 l 6527 5533 l 6403 5198 l 6403 5198 l 6424 5383 l 6319 5229 l cp
-eoclip
-n 5850 3825 m
- 6480 5535 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 6319 5229 m 6424 5383 l 6403 5198 l 6319 5229 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-5417 4044 m 5746 3905 l 5711 3822 l 5382 3961 l 5382 3961 l 5566 3933 l 5417 4044 l cp
-eoclip
-n 1575 5625 m
- 5715 3870 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 5417 4044 m 5566 3933 l 5382 3961 l 5417 4044 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-3897 3780 m 3540 3780 l 3540 3870 l 3897 3870 l 3897 3870 l 3717 3825 l 3897 3780 l cp
-eoclip
-n 5625 3825 m
- 3555 3825 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 3897 3780 m 3717 3825 l 3897 3870 l 3897 3780 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-3075 4188 m 3327 3936 l 3263 3872 l 3011 4124 l 3011 4124 l 3171 4029 l 3075 4188 l cp
-eoclip
-n 1575 5625 m
- 3285 3915 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 3075 4188 m 3171 4029 l 3011 4124 l 3075 4188 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-3528 2520 m 3885 2520 l 3885 2430 l 3528 2430 l 3528 2430 l 3708 2475 l 3528 2520 l cp
-eoclip
-n 1800 2475 m
- 3870 2475 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 3528 2520 m 3708 2475 l 3528 2430 l 3528 2520 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-4304 2156 m 4052 2408 l 4116 2472 l 4368 2220 l 4368 2220 l 4209 2316 l 4304 2156 l cp
-eoclip
-n 5850 675 m
- 4095 2430 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 4304 2156 m 4209 2316 l 4368 2220 l 4304 2156 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-6319 2079 m 6442 2414 l 6527 2383 l 6403 2048 l 6403 2048 l 6424 2233 l 6319 2079 l cp
-eoclip
-n 5850 675 m
- 6480 2385 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 6319 2079 m 6424 2233 l 6403 2048 l 6319 2079 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-5417 894 m 5746 755 l 5711 672 l 5382 811 l 5382 811 l 5566 783 l 5417 894 l cp
-eoclip
-n 1575 2475 m
- 5715 720 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 5417 894 m 5566 783 l 5382 811 l 5417 894 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-3528 5670 m 3885 5670 l 3885 5580 l 3528 5580 l 3528 5580 l 3708 5625 l 3528 5670 l cp
-eoclip
-n 1800 5625 m
- 3870 5625 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 3528 5670 m 3708 5625 l 3528 5580 l 3528 5670 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-4572 5580 m 4215 5580 l 4215 5670 l 4572 5670 l 4572 5670 l 4392 5625 l 4572 5580 l cp
-eoclip
-n 6300 5625 m
- 4230 5625 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 4572 5580 m 4392 5625 l 4572 5670 l 4572 5580 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-4304 5306 m 4052 5558 l 4116 5622 l 4368 5370 l 4368 5370 l 4209 5466 l 4304 5306 l cp
-eoclip
-n 5850 3825 m
- 4095 5580 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 4304 5306 m 4209 5466 l 4368 5370 l 4304 5306 l  cp gs 0.00 setgray ef gr  col0 s
-% here ends figure;
-% 
-% here starts figure with depth 50
-% Ellipse
-15.000 slw
-n 3375 3825 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 5850 3825 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Polyline
-0 slj
-0 slc
-n 247 2947 m 2947 247 l 9697 247 l 6997 2947 l
- 247 2947 l  cp gs col0 s gr 
-% Polyline
-n 247 6097 m 2947 3397 l 9697 3397 l 6997 6097 l
- 247 6097 l  cp gs col0 s gr 
-% Ellipse
-n 1575 2475 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 4050 2475 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 6525 2475 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 5850 675 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 1575 5625 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 4050 5625 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 6525 5625 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% here ends figure;
-% 
-% here starts figure with depth 40
-/Helvetica ff 480.00 scf sf
-8280 2610 m
-gs 1 -1 sc (SubDigraph adaptor) col0 sh gr
-% Polyline
-0 slj
-0 slc
-7.500 slw
- [15 45] 45 sd
-n 4050 2610 m
- 4050 5625 l gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 5850 810 m
- 5850 3825 l gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 6525 2610 m
- 6525 5625 l gs col0 s gr  [] 0 sd
-/Helvetica ff 480.00 scf sf
-8280 5760 m
-gs 1 -1 sc (Original digraph) col0 sh gr
-% Polyline
- [15 45] 45 sd
-n 1575 2610 m
- 1575 5625 l gs col0 s gr  [] 0 sd
-% here ends figure;
-$F2psEnd
-rs
-showpage
-%%Trailer
-%EOF
Index: c/images/adaptors2.eps
===================================================================
--- doc/images/adaptors2.eps	(revision 1050)
+++ 	(revision )
@@ -1,349 +1,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: adaptors2.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 5
-%%CreationDate: Sun Feb 21 18:51:31 2010
-%%For: Peter@KOVACSPETER (PÃ©ter,U-KOVACSPETER\Peter,S-1-5-21-1774138250-1299389707-1938712334-1001)
-%%BoundingBox: 0 0 787 570
-%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
-newpath 0 570 moveto 0 0 lineto 787 0 lineto 787 570 lineto closepath clip newpath
--14.2 583.9 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
- /DrawEllipse {
-	/endangle exch def
-	/startangle exch def
-	/yrad exch def
-	/xrad exch def
-	/y exch def
-	/x exch def
-	/savematrix mtrx currentmatrix def
-	x y tr xrad yrad sc 0 0 1 startangle endangle arc
-	closepath
-	savematrix setmatrix
-	} def
-
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-10 setmiterlimit
-0 slj 0 slc
- 0.06299 0.06299 sc
-%
-% Fig objects follow
-%
-% 
-% here starts figure with depth 60
-% Polyline
-0 slj
-0 slc
-15.000 slw
-gs  clippath
-5417 4044 m 5746 3905 l 5711 3822 l 5382 3961 l 5382 3961 l 5566 3933 l 5417 4044 l cp
-eoclip
-n 1575 5625 m
- 5715 3870 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 5417 4044 m 5566 3933 l 5382 3961 l 5417 4044 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-5417 7194 m 5746 7055 l 5711 6972 l 5382 7111 l 5382 7111 l 5566 7083 l 5417 7194 l cp
-eoclip
-n 1575 8775 m
- 5715 7020 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 5417 7194 m 5566 7083 l 5382 7111 l 5417 7194 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-6319 8379 m 6442 8714 l 6527 8683 l 6403 8348 l 6403 8348 l 6424 8533 l 6319 8379 l cp
-eoclip
-n 5850 6975 m
- 6480 8685 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 6319 8379 m 6424 8533 l 6403 8348 l 6319 8379 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-4304 8456 m 4052 8708 l 4116 8772 l 4368 8520 l 4368 8520 l 4209 8616 l 4304 8456 l cp
-eoclip
-n 5850 6975 m
- 4095 8730 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 4304 8456 m 4209 8616 l 4368 8520 l 4304 8456 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-4572 8730 m 4215 8730 l 4215 8820 l 4572 8820 l 4572 8820 l 4392 8775 l 4572 8730 l cp
-eoclip
-n 6300 8775 m
- 4230 8775 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 4572 8730 m 4392 8775 l 4572 8820 l 4572 8730 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-3528 8820 m 3885 8820 l 3885 8730 l 3528 8730 l 3528 8730 l 3708 8775 l 3528 8820 l cp
-eoclip
-n 1800 8775 m
- 3870 8775 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 3528 8820 m 3708 8775 l 3528 8730 l 3528 8820 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-n 1800 2475 m
- 3870 2475 l gs col0 s gr 
-% Polyline
-n 1575 2475 m
- 5715 720 l gs col0 s gr 
-% Polyline
-n 5850 675 m
- 4095 2430 l gs col0 s gr 
-% Polyline
-n 5850 675 m
- 6480 2385 l gs col0 s gr 
-% Polyline
-gs  clippath
-3075 7338 m 3327 7086 l 3263 7022 l 3011 7274 l 3011 7274 l 3171 7179 l 3075 7338 l cp
-eoclip
-n 1575 8775 m
- 3285 7065 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 3075 7338 m 3171 7179 l 3011 7274 l 3075 7338 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-3528 5670 m 3885 5670 l 3885 5580 l 3528 5580 l 3528 5580 l 3708 5625 l 3528 5670 l cp
-eoclip
-n 1800 5625 m
- 3870 5625 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 3528 5670 m 3708 5625 l 3528 5580 l 3528 5670 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-4304 5306 m 4052 5558 l 4116 5622 l 4368 5370 l 4368 5370 l 4209 5466 l 4304 5306 l cp
-eoclip
-n 5850 3825 m
- 4095 5580 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 4304 5306 m 4209 5466 l 4368 5370 l 4304 5306 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-6319 5229 m 6442 5564 l 6527 5533 l 6403 5198 l 6403 5198 l 6424 5383 l 6319 5229 l cp
-eoclip
-n 5850 3825 m
- 6480 5535 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 6319 5229 m 6424 5383 l 6403 5198 l 6319 5229 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-15.000 slw
-gs  clippath
-3897 6930 m 3540 6930 l 3540 7020 l 3897 7020 l 3897 7020 l 3717 6975 l 3897 6930 l cp
-eoclip
-n 5625 6975 m
- 3555 6975 l gs col0 s gr gr
-
-% arrowhead
-75.000 slw
-n 3897 6930 m 3717 6975 l 3897 7020 l 3897 6930 l  cp gs 0.00 setgray ef gr  col0 s
-% here ends figure;
-% 
-% here starts figure with depth 50
-% Polyline
-0 slj
-0 slc
-15.000 slw
-n 247 6097 m 2947 3397 l 9697 3397 l 6997 6097 l
- 247 6097 l  cp gs col0 s gr 
-% Polyline
-n 247 9247 m 2947 6547 l 9697 6547 l 6997 9247 l
- 247 9247 l  cp gs col0 s gr 
-% Ellipse
-n 4050 2475 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 6525 2475 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 1575 2475 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 5850 675 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 1575 5625 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 4050 5625 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 6525 5625 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 5850 3825 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 1575 8775 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 4050 8775 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 3375 6975 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 6525 8775 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Ellipse
-n 5850 6975 225 112 0 360 DrawEllipse gs 1.00 setgray ef gr gs col0 s gr
-
-% Polyline
-n 247 2947 m 2947 247 l 9697 247 l 6997 2947 l
- 247 2947 l  cp gs col0 s gr 
-% here ends figure;
-% 
-% here starts figure with depth 40
-/Helvetica ff 480.00 scf sf
-8280 8910 m
-gs 1 -1 sc (Original digraph) col0 sh gr
-% Polyline
-0 slj
-0 slc
-7.500 slw
- [15 45] 45 sd
-n 5850 810 m
- 5850 3825 l gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 6525 2610 m
- 6525 5625 l gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 4050 2610 m
- 4050 5625 l gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 1575 2610 m
- 1575 5625 l gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 5850 3960 m
- 5850 6975 l gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 6525 5760 m
- 6525 8775 l gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 4050 5760 m
- 4050 8775 l gs col0 s gr  [] 0 sd
-/Helvetica ff 480.00 scf sf
-8280 2610 m
-gs 1 -1 sc (Undirector adaptor) col0 sh gr
-/Helvetica ff 480.00 scf sf
-8280 5760 m
-gs 1 -1 sc (SubDigraph adaptor) col0 sh gr
-% Polyline
- [15 45] 45 sd
-n 1575 5760 m
- 1575 8775 l gs col0 s gr  [] 0 sd
-% here ends figure;
-$F2psEnd
-rs
-showpage
-%%Trailer
-%EOF
Index: doc/images/bipartite_partitions.eps
===================================================================
--- doc/images/bipartite_partitions.eps	(revision 1045)
+++ doc/images/bipartite_partitions.eps	(revision 587)
@@ -1,5 +1,5 @@
 %!PS-Adobe-2.0 EPSF-2.0
 %%Creator: LEMON, graphToEps()
-%%CreationDate: Fri Mar  8 00:18:43 2013
+%%CreationDate: Tue Nov 15 16:51:43 2005
 %%BoundingBox: 0 0 842 596
 %%EndComments
@@ -54,60 +54,60 @@
 %Edges:
 gsave
-513.857 -446.322 296.569 -487.43 79.2808 -528.539 0 0 0 7.00153 lb
-513.857 -446.322 575.52 -315.656 637.183 -184.989 0 0 0 7.00153 lb
-393.468 566.711 494.771 434.577 596.074 302.442 0 0 0 7.00153 lb
-393.468 566.711 155.625 579.925 -82.2171 593.138 0 0 0 7.00153 lb
-393.468 566.711 251.056 450.726 108.644 334.741 0 0 0 7.00153 lb
-869.153 52.8539 732.613 177.648 596.074 302.442 0 0 0 7.00153 lb
-869.153 52.8539 753.168 -66.0676 637.183 -184.989 0 0 0 7.00153 lb
--82.2171 593.138 -91.0261 346.487 -99.8351 99.8351 0 0 0 7.00153 lb
--663.61 546.157 -753.168 394.936 -842.726 243.715 0 0 0 7.00153 lb
--663.61 546.157 -574.052 437.513 -484.494 328.869 0 0 0 7.00153 lb
--1077.63 161.498 -960.178 202.606 -842.726 243.715 0 0 0 7.00153 lb
--1077.63 161.498 -968.987 66.0674 -860.344 -29.3633 0 0 0 7.00153 lb
--1177.47 -234.906 -1029.18 -381.722 -880.898 -528.539 0 0 0 7.00153 lb
--1177.47 -234.906 -1018.91 -132.135 -860.344 -29.3633 0 0 0 7.00153 lb
--880.898 -528.539 -744.359 -387.595 -607.82 -246.651 0 0 0 7.00153 lb
--499.175 -499.175 -355.295 -475.685 -211.415 -452.194 0 0 0 7.00153 lb
--499.175 -499.175 -553.498 -372.913 -607.82 -246.651 0 0 0 7.00153 lb
--499.175 -499.175 -386.587 -315.087 -274 -131 0 0 0 7.00153 lb
-79.2808 -528.539 -66.0671 -490.366 -211.415 -452.194 0 0 0 7.00153 lb
-637.183 -184.989 421.363 -253.993 205.543 -322.996 0 0 0 7.00153 lb
-205.543 -322.996 162.966 -226.097 120.389 -129.198 0 0 0 7.00153 lb
-399.34 88.0898 259.865 -20.5541 120.389 -129.198 0 0 0 7.00153 lb
-399.34 88.0898 253.992 211.415 108.644 334.741 0 0 0 7.00153 lb
--842.726 243.715 -471.281 171.775 -99.8351 99.8351 0 0 0 7.00153 lb
--842.726 243.715 -558.363 56.3575 -274 -131 0 0 0 7.00153 lb
--860.344 -29.3633 -734.082 -138.007 -607.82 -246.651 0 0 0 7.00153 lb
--211.415 -452.194 -45.513 -290.696 120.389 -129.198 0 0 0 7.00153 lb
--99.8351 99.8351 4.40445 217.288 108.644 334.741 0 0 0 7.00153 lb
--99.8351 99.8351 -292.165 214.352 -484.494 328.869 0 0 0 7.00153 lb
-120.389 -129.198 -76.8055 -130.099 -274 -131 0 0 0 7.00153 lb
+513.857 -446.322 296.569 -487.43 79.2808 -528.539 0 0 0 2 lb
+513.857 -446.322 575.52 -315.655 637.183 -184.989 0 0 0 2 lb
+393.468 566.711 494.771 434.577 596.074 302.442 0 0 0 2 lb
+393.468 566.711 155.625 579.925 -82.2171 593.138 0 0 0 2 lb
+393.468 566.711 251.056 450.726 108.644 334.741 0 0 0 2 lb
+869.153 52.8539 732.613 177.648 596.074 302.442 0 0 0 2 lb
+869.153 52.8539 753.168 -66.0676 637.183 -184.989 0 0 0 2 lb
+-82.2171 593.138 -91.0261 346.487 -99.8351 99.8351 0 0 0 2 lb
+-663.61 546.157 -753.168 394.936 -842.726 243.715 0 0 0 2 lb
+-663.61 546.157 -574.052 437.513 -484.494 328.869 0 0 0 2 lb
+-1077.63 161.498 -960.178 202.606 -842.726 243.715 0 0 0 2 lb
+-1077.63 161.498 -968.987 66.0674 -860.344 -29.3633 0 0 0 2 lb
+-1177.47 -234.906 -1029.18 -381.722 -880.898 -528.539 0 0 0 2 lb
+-1177.47 -234.906 -1018.91 -132.135 -860.344 -29.3633 0 0 0 2 lb
+-880.898 -528.539 -744.359 -387.595 -607.82 -246.651 0 0 0 2 lb
+-499.175 -499.175 -355.295 -475.685 -211.415 -452.194 0 0 0 2 lb
+-499.175 -499.175 -553.498 -372.913 -607.82 -246.651 0 0 0 2 lb
+-499.175 -499.175 -386.587 -315.087 -274 -131 0 0 0 2 lb
+79.2808 -528.539 -66.0671 -490.366 -211.415 -452.194 0 0 0 2 lb
+637.183 -184.989 421.363 -253.993 205.543 -322.996 0 0 0 2 lb
+205.543 -322.996 162.966 -226.097 120.389 -129.198 0 0 0 2 lb
+399.34 88.0898 259.865 -20.5541 120.389 -129.198 0 0 0 2 lb
+399.34 88.0898 253.992 211.415 108.644 334.741 0 0 0 2 lb
+-842.726 243.715 -471.281 171.775 -99.8351 99.8351 0 0 0 2 lb
+-842.726 243.715 -558.363 56.3575 -274 -131 0 0 0 2 lb
+-860.344 -29.3633 -734.082 -138.007 -607.82 -246.651 0 0 0 2 lb
+-211.415 -452.194 -45.513 -290.696 120.389 -129.198 0 0 0 2 lb
+-99.8351 99.8351 4.40445 217.288 108.644 334.741 0 0 0 2 lb
+-99.8351 99.8351 -292.165 214.352 -484.494 328.869 0 0 0 2 lb
+120.389 -129.198 -76.8055 -130.099 -274 -131 0 0 0 2 lb
 grestore
 %Nodes:
 gsave
--274 -131 23.3384 1 0 0 nc
--607.82 -246.651 23.3384 1 0 0 nc
--484.494 328.869 23.3384 0 0 1 nc
-108.644 334.741 23.3384 0 0 1 nc
-120.389 -129.198 23.3384 0 0 1 nc
--99.8351 99.8351 23.3384 1 0 0 nc
--211.415 -452.194 23.3384 1 0 0 nc
--860.344 -29.3633 23.3384 0 0 1 nc
--842.726 243.715 23.3384 0 0 1 nc
-399.34 88.0898 23.3384 1 0 0 nc
-205.543 -322.996 23.3384 1 0 0 nc
-637.183 -184.989 23.3384 0 0 1 nc
-79.2808 -528.539 23.3384 0 0 1 nc
--499.175 -499.175 23.3384 0 0 1 nc
--880.898 -528.539 23.3384 0 0 1 nc
--1177.47 -234.906 23.3384 1 0 0 nc
--1077.63 161.498 23.3384 1 0 0 nc
--663.61 546.157 23.3384 1 0 0 nc
--82.2171 593.138 23.3384 0 0 1 nc
-596.074 302.442 23.3384 0 0 1 nc
-869.153 52.8539 23.3384 1 0 0 nc
-393.468 566.711 23.3384 1 0 0 nc
-513.857 -446.322 23.3384 1 0 0 nc
+-274 -131 20 1 0 0 nc
+-607.82 -246.651 20 1 0 0 nc
+-484.494 328.869 20 0 0 1 nc
+108.644 334.741 20 0 0 1 nc
+120.389 -129.198 20 0 0 1 nc
+-99.8351 99.8351 20 1 0 0 nc
+-211.415 -452.194 20 1 0 0 nc
+-860.344 -29.3633 20 0 0 1 nc
+-842.726 243.715 20 0 0 1 nc
+399.34 88.0898 20 1 0 0 nc
+205.543 -322.996 20 1 0 0 nc
+637.183 -184.989 20 0 0 1 nc
+79.2808 -528.539 20 0 0 1 nc
+-499.175 -499.175 20 0 0 1 nc
+-880.898 -528.539 20 0 0 1 nc
+-1177.47 -234.906 20 1 0 0 nc
+-1077.63 161.498 20 1 0 0 nc
+-663.61 546.157 20 1 0 0 nc
+-82.2171 593.138 20 0 0 1 nc
+596.074 302.442 20 0 0 1 nc
+869.153 52.8539 20 1 0 0 nc
+393.468 566.711 20 1 0 0 nc
+513.857 -446.322 20 1 0 0 nc
 grestore
 grestore
Index: doc/images/connected_components.eps
===================================================================
--- doc/images/connected_components.eps	(revision 1045)
+++ doc/images/connected_components.eps	(revision 587)
@@ -1,5 +1,5 @@
 %!PS-Adobe-2.0 EPSF-2.0
 %%Creator: LEMON, graphToEps()
-%%CreationDate: Fri Mar  8 00:18:43 2013
+%%CreationDate: Fri Nov  4 13:47:12 2005
 %%BoundingBox: 0 0 842 596
 %%EndComments
@@ -54,105 +54,105 @@
 %Edges:
 gsave
-574.035 177.301 622.149 225.748 670.264 274.195 0 0 0 6.25356 lb
-694.579 115.483 682.421 194.839 670.264 274.195 0 0 0 6.25356 lb
-280.402 10.3938 246.402 -6.60595 212.403 -23.6057 0 0 0 6.25356 lb
-280.402 10.3938 283.493 -18.9695 286.584 -48.3327 0 0 0 6.25356 lb
-212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 0 0 0 6.25356 lb
-286.584 -48.3327 326.765 -79.2414 366.947 -110.15 0 0 0 6.25356 lb
-286.584 -48.3327 278.857 -111.695 271.13 -175.058 0 0 0 6.25356 lb
-438.037 -88.514 417.946 -142.604 397.855 -196.694 0 0 0 6.25356 lb
-438.037 -88.514 402.492 -99.332 366.947 -110.15 0 0 0 6.25356 lb
-397.855 -196.694 382.401 -153.422 366.947 -110.15 0 0 0 6.25356 lb
-366.947 -110.15 319.038 -142.604 271.13 -175.058 0 0 0 6.25356 lb
-271.13 -175.058 274.221 -213.694 277.311 -252.33 0 0 0 6.25356 lb
-271.13 -175.058 238.675 -190.512 206.221 -205.967 0 0 0 6.25356 lb
-277.311 -252.33 241.766 -229.149 206.221 -205.967 0 0 0 6.25356 lb
--840.856 -246.718 -804.351 -66.7145 -767.847 113.289 0 0 0 6.25356 lb
--579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 0 6.25356 lb
--579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 0 6.25356 lb
--767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 0 6.25356 lb
-906.312 201.403 946.592 42.798 986.873 -115.807 0 0 0 6.25356 lb
-906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0 0 6.25356 lb
-986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0 0 6.25356 lb
--470.779 158.605 -390.218 50.3508 -309.657 -57.9033 0 0 0 6.25356 lb
-422.945 521.129 208.955 541.269 -5.03507 561.41 0 0 0 6.25356 lb
-422.945 521.129 376.371 417.911 329.797 314.692 0 0 0 6.25356 lb
-422.945 521.129 474.554 276.928 526.164 32.7279 0 0 0 6.25356 lb
--5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0 0 0 6.25356 lb
-329.797 314.692 130.912 317.209 -67.9734 319.727 0 0 0 6.25356 lb
--67.9734 319.727 229.095 176.227 526.164 32.7279 0 0 0 6.25356 lb
-762.812 -17.6227 644.488 7.5526 526.164 32.7279 0 0 0 6.25356 lb
-762.812 -17.6227 746.448 -162.381 730.084 -307.139 0 0 0 6.25356 lb
-526.164 32.7279 470.779 -128.394 415.393 -289.516 0 0 0 6.25356 lb
-730.084 -307.139 572.738 -298.327 415.393 -289.516 0 0 0 6.25356 lb
-415.393 -289.516 173.71 -318.468 -67.9734 -347.42 0 0 0 6.25356 lb
--67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0 0 0 6.25356 lb
--67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0 0 0 6.25356 lb
--309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0 0 0 6.25356 lb
--323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0 0 0 6.25356 lb
--26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 0 0 0 6.25356 lb
--26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 0 0 0 6.25356 lb
--26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 0 0 0 6.25356 lb
--26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 0 0 0 6.25356 lb
-116.407 -173.66 158.808 -67.6589 201.208 38.3422 0 0 0 6.25356 lb
--262.548 107.243 -137.997 120.493 -13.4452 133.743 0 0 0 6.25356 lb
--262.548 107.243 -221.472 176.144 -180.397 245.045 0 0 0 6.25356 lb
--13.4452 133.743 -96.9211 189.394 -180.397 245.045 0 0 0 6.25356 lb
--180.397 245.045 -113.509 338.465 -132.697 451.748 0 0 0 6.25356 lb
--180.397 245.045 -199.585 358.328 -132.697 451.748 0 0 0 6.25356 lb
--416.25 345.746 -274.474 398.747 -132.697 451.748 0 0 0 6.25356 lb
--416.25 345.746 -393.725 457.048 -371.2 568.349 0 0 0 6.25356 lb
--132.697 451.748 -251.948 510.048 -371.2 568.349 0 0 0 6.25356 lb
-670.264 274.195 629.188 409.347 588.113 544.499 0 0 0 6.25356 lb
-670.264 274.195 797.466 341.771 924.667 409.347 0 0 0 6.25356 lb
-588.113 544.499 756.39 476.923 924.667 409.347 0 0 0 6.25356 lb
--689.204 -237.261 -587.735 -114.393 -567.302 43.6423 0 0 0 6.25356 lb
--689.204 -237.261 -668.771 -79.2259 -567.302 43.6423 0 0 0 6.25356 lb
+574.035 177.301 622.149 225.748 670.264 274.195 0 0 0 2 lb
+694.579 115.483 682.421 194.839 670.264 274.195 0 0 0 2 lb
+280.402 10.3938 246.402 -6.60595 212.403 -23.6057 0 0 0 2 lb
+280.402 10.3938 283.493 -18.9695 286.584 -48.3327 0 0 0 2 lb
+212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 0 0 0 2 lb
+286.584 -48.3327 326.765 -79.2414 366.947 -110.15 0 0 0 2 lb
+286.584 -48.3327 278.857 -111.695 271.13 -175.058 0 0 0 2 lb
+438.037 -88.514 417.946 -142.604 397.855 -196.694 0 0 0 2 lb
+438.037 -88.514 402.492 -99.332 366.947 -110.15 0 0 0 2 lb
+397.855 -196.694 382.401 -153.422 366.947 -110.15 0 0 0 2 lb
+366.947 -110.15 319.038 -142.604 271.13 -175.058 0 0 0 2 lb
+271.13 -175.058 274.221 -213.694 277.311 -252.33 0 0 0 2 lb
+271.13 -175.058 238.675 -190.512 206.221 -205.967 0 0 0 2 lb
+277.311 -252.33 241.766 -229.149 206.221 -205.967 0 0 0 2 lb
+-840.856 -246.718 -804.351 -66.7145 -767.847 113.289 0 0 0 2 lb
+-579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 0 2 lb
+-579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 0 2 lb
+-767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 0 2 lb
+906.312 201.403 946.592 42.798 986.873 -115.807 0 0 0 2 lb
+906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0 0 2 lb
+986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0 0 2 lb
+-470.779 158.605 -390.218 50.3508 -309.657 -57.9033 0 0 0 2 lb
+422.945 521.129 208.955 541.269 -5.03507 561.41 0 0 0 2 lb
+422.945 521.129 376.371 417.911 329.797 314.692 0 0 0 2 lb
+422.945 521.129 474.554 276.928 526.164 32.7279 0 0 0 2 lb
+-5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0 0 0 2 lb
+329.797 314.692 130.912 317.209 -67.9734 319.727 0 0 0 2 lb
+-67.9734 319.727 229.095 176.227 526.164 32.7279 0 0 0 2 lb
+762.812 -17.6227 644.488 7.5526 526.164 32.7279 0 0 0 2 lb
+762.812 -17.6227 746.448 -162.381 730.084 -307.139 0 0 0 2 lb
+526.164 32.7279 470.779 -128.394 415.393 -289.516 0 0 0 2 lb
+730.084 -307.139 572.738 -298.327 415.393 -289.516 0 0 0 2 lb
+415.393 -289.516 173.71 -318.468 -67.9734 -347.42 0 0 0 2 lb
+-67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0 0 0 2 lb
+-67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0 0 0 2 lb
+-309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0 0 0 2 lb
+-323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0 0 0 2 lb
+-26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 0 0 0 2 lb
+-26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 0 0 0 2 lb
+-26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 0 0 0 2 lb
+-26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 0 0 0 2 lb
+116.407 -173.66 158.808 -67.6589 201.208 38.3422 0 0 0 2 lb
+-262.548 107.243 -137.997 120.493 -13.4452 133.743 0 0 0 2 lb
+-262.548 107.243 -221.472 176.144 -180.397 245.045 0 0 0 2 lb
+-13.4452 133.743 -96.9211 189.394 -180.397 245.045 0 0 0 2 lb
+-180.397 245.045 -142.256 345.099 -132.697 451.748 0 0 0 2 lb
+-180.397 245.045 -170.838 351.694 -132.697 451.748 0 0 0 2 lb
+-416.25 345.746 -274.474 398.747 -132.697 451.748 0 0 0 2 lb
+-416.25 345.746 -393.725 457.048 -371.2 568.349 0 0 0 2 lb
+-132.697 451.748 -251.948 510.048 -371.2 568.349 0 0 0 2 lb
+670.264 274.195 629.188 409.347 588.113 544.499 0 0 0 2 lb
+670.264 274.195 797.466 341.771 924.667 409.347 0 0 0 2 lb
+588.113 544.499 756.39 476.923 924.667 409.347 0 0 0 2 lb
+-689.204 -237.261 -614.799 -102.648 -567.302 43.6423 0 0 0 2 lb
+-689.204 -237.261 -641.707 -90.9706 -567.302 43.6423 0 0 0 2 lb
 grestore
 %Nodes:
 gsave
--567.302 43.6423 20.8452 0 0 0 nc
--689.204 -237.261 20.8452 0 0 0 nc
-924.667 409.347 20.8452 1 0 0 nc
-588.113 544.499 20.8452 1 0 0 nc
-670.264 274.195 20.8452 1 0 0 nc
--371.2 568.349 20.8452 0 1 0 nc
--132.697 451.748 20.8452 0 1 0 nc
--416.25 345.746 20.8452 0 1 0 nc
--180.397 245.045 20.8452 0 1 0 nc
--13.4452 133.743 20.8452 0 1 0 nc
--262.548 107.243 20.8452 0 1 0 nc
-201.208 38.3422 20.8452 0 1 0 nc
-116.407 -173.66 20.8452 0 1 0 nc
--26.6953 -19.9585 20.8452 0 1 0 nc
--539.894 -262.64 20.8452 0 0 1 nc
--323.543 -433.964 20.8452 0 0 1 nc
--309.657 -57.9033 20.8452 0 0 1 nc
--67.9734 -347.42 20.8452 0 0 1 nc
-415.393 -289.516 20.8452 0 0 1 nc
-730.084 -307.139 20.8452 0 0 1 nc
-526.164 32.7279 20.8452 0 0 1 nc
-762.812 -17.6227 20.8452 0 0 1 nc
--67.9734 319.727 20.8452 0 0 1 nc
-329.797 314.692 20.8452 0 0 1 nc
--5.03507 561.41 20.8452 0 0 1 nc
-422.945 521.129 20.8452 0 0 1 nc
--470.779 158.605 20.8452 0 0 1 nc
-986.873 -115.807 20.8452 0 0 1 nc
-906.312 201.403 20.8452 0 0 1 nc
--767.847 113.289 20.8452 0 0 1 nc
--579.033 445.603 20.8452 0 0 1 nc
--840.856 -246.718 20.8452 0 0 1 nc
-206.221 -205.967 20.8452 1 1 0 nc
-277.311 -252.33 20.8452 1 1 0 nc
-271.13 -175.058 20.8452 1 1 0 nc
-366.947 -110.15 20.8452 1 1 0 nc
-397.855 -196.694 20.8452 1 1 0 nc
-438.037 -88.514 20.8452 1 1 0 nc
-286.584 -48.3327 20.8452 1 1 0 nc
-212.403 -23.6057 20.8452 1 1 0 nc
-280.402 10.3938 20.8452 1 1 0 nc
-694.579 115.483 20.8452 1 0 0 nc
-574.035 177.301 20.8452 1 0 0 nc
+-567.302 43.6423 20 0 0 0 nc
+-689.204 -237.261 20 0 0 0 nc
+924.667 409.347 20 1 0 0 nc
+588.113 544.499 20 1 0 0 nc
+670.264 274.195 20 1 0 0 nc
+-371.2 568.349 20 0 1 0 nc
+-132.697 451.748 20 0 1 0 nc
+-416.25 345.746 20 0 1 0 nc
+-180.397 245.045 20 0 1 0 nc
+-13.4452 133.743 20 0 1 0 nc
+-262.548 107.243 20 0 1 0 nc
+201.208 38.3422 20 0 1 0 nc
+116.407 -173.66 20 0 1 0 nc
+-26.6953 -19.9585 20 0 1 0 nc
+-539.894 -262.64 20 0 0 1 nc
+-323.543 -433.964 20 0 0 1 nc
+-309.657 -57.9033 20 0 0 1 nc
+-67.9734 -347.42 20 0 0 1 nc
+415.393 -289.516 20 0 0 1 nc
+730.084 -307.139 20 0 0 1 nc
+526.164 32.7279 20 0 0 1 nc
+762.812 -17.6227 20 0 0 1 nc
+-67.9734 319.727 20 0 0 1 nc
+329.797 314.692 20 0 0 1 nc
+-5.03507 561.41 20 0 0 1 nc
+422.945 521.129 20 0 0 1 nc
+-470.779 158.605 20 0 0 1 nc
+986.873 -115.807 20 0 0 1 nc
+906.312 201.403 20 0 0 1 nc
+-767.847 113.289 20 0 0 1 nc
+-579.033 445.603 20 0 0 1 nc
+-840.856 -246.718 20 0 0 1 nc
+206.221 -205.967 20 1 1 0 nc
+277.311 -252.33 20 1 1 0 nc
+271.13 -175.058 20 1 1 0 nc
+366.947 -110.15 20 1 1 0 nc
+397.855 -196.694 20 1 1 0 nc
+438.037 -88.514 20 1 1 0 nc
+286.584 -48.3327 20 1 1 0 nc
+212.403 -23.6057 20 1 1 0 nc
+280.402 10.3938 20 1 1 0 nc
+694.579 115.483 20 1 0 0 nc
+574.035 177.301 20 1 0 0 nc
 grestore
 grestore
Index: doc/images/edge_biconnected_components.eps
===================================================================
--- doc/images/edge_biconnected_components.eps	(revision 1045)
+++ doc/images/edge_biconnected_components.eps	(revision 587)
@@ -1,5 +1,5 @@
 %!PS-Adobe-2.0 EPSF-2.0
 %%Creator: LEMON, graphToEps()
-%%CreationDate: Fri Mar  8 00:18:43 2013
+%%CreationDate: Fri Nov  4 13:47:12 2005
 %%BoundingBox: 0 0 842 596
 %%EndComments
@@ -54,105 +54,105 @@
 %Edges:
 gsave
-574.035 177.301 622.149 225.748 670.264 274.195 1 0 0 6.25356 lb
-694.579 115.483 682.421 194.839 670.264 274.195 1 0 0 6.25356 lb
-280.402 10.3938 246.402 -6.60595 212.403 -23.6057 0 0 1 6.25356 lb
-280.402 10.3938 283.493 -18.9695 286.584 -48.3327 0 0 1 6.25356 lb
-212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 0 0 1 6.25356 lb
-286.584 -48.3327 326.765 -79.2414 366.947 -110.15 0 0 1 6.25356 lb
-286.584 -48.3327 278.857 -111.695 271.13 -175.058 0 0 1 6.25356 lb
-438.037 -88.514 417.946 -142.604 397.855 -196.694 0 0 1 6.25356 lb
-438.037 -88.514 402.492 -99.332 366.947 -110.15 0 0 1 6.25356 lb
-397.855 -196.694 382.401 -153.422 366.947 -110.15 0 0 1 6.25356 lb
-366.947 -110.15 319.038 -142.604 271.13 -175.058 0 0 1 6.25356 lb
-271.13 -175.058 274.221 -213.694 277.311 -252.33 0 0 1 6.25356 lb
-271.13 -175.058 238.675 -190.512 206.221 -205.967 0 0 1 6.25356 lb
-277.311 -252.33 241.766 -229.149 206.221 -205.967 0 0 1 6.25356 lb
--840.856 -246.718 -804.351 -66.7145 -767.847 113.289 1 0 0 6.25356 lb
--579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 1 6.25356 lb
--579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 1 6.25356 lb
--767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 1 6.25356 lb
-906.312 201.403 946.592 42.798 986.873 -115.807 0 0 1 6.25356 lb
-906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0 1 6.25356 lb
-986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0 1 6.25356 lb
--470.779 158.605 -390.218 50.3508 -309.657 -57.9033 1 0 0 6.25356 lb
-422.945 521.129 208.955 541.269 -5.03507 561.41 0 0 1 6.25356 lb
-422.945 521.129 376.371 417.911 329.797 314.692 0 0 1 6.25356 lb
-422.945 521.129 474.554 276.928 526.164 32.7279 0 0 1 6.25356 lb
--5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0 0 1 6.25356 lb
-329.797 314.692 130.912 317.209 -67.9734 319.727 0 0 1 6.25356 lb
--67.9734 319.727 229.095 176.227 526.164 32.7279 0 0 1 6.25356 lb
-762.812 -17.6227 644.488 7.5526 526.164 32.7279 0 0 1 6.25356 lb
-762.812 -17.6227 746.448 -162.381 730.084 -307.139 0 0 1 6.25356 lb
-526.164 32.7279 470.779 -128.394 415.393 -289.516 0 0 1 6.25356 lb
-730.084 -307.139 572.738 -298.327 415.393 -289.516 0 0 1 6.25356 lb
-415.393 -289.516 173.71 -318.468 -67.9734 -347.42 1 0 0 6.25356 lb
--67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0 0 1 6.25356 lb
--67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0 0 1 6.25356 lb
--309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0 0 1 6.25356 lb
--323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0 0 1 6.25356 lb
--26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 0 0 1 6.25356 lb
--26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 0 0 1 6.25356 lb
--26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 0 0 1 6.25356 lb
--26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 0 0 1 6.25356 lb
-116.407 -173.66 158.808 -67.6589 201.208 38.3422 0 0 1 6.25356 lb
--262.548 107.243 -137.997 120.493 -13.4452 133.743 0 0 1 6.25356 lb
--262.548 107.243 -221.472 176.144 -180.397 245.045 0 0 1 6.25356 lb
--13.4452 133.743 -96.9211 189.394 -180.397 245.045 0 0 1 6.25356 lb
--180.397 245.045 -113.509 338.465 -132.697 451.748 0 0 1 6.25356 lb
--180.397 245.045 -199.585 358.328 -132.697 451.748 0 0 1 6.25356 lb
--416.25 345.746 -274.474 398.747 -132.697 451.748 0 0 1 6.25356 lb
--416.25 345.746 -393.725 457.048 -371.2 568.349 0 0 1 6.25356 lb
--132.697 451.748 -251.948 510.048 -371.2 568.349 0 0 1 6.25356 lb
-670.264 274.195 629.188 409.347 588.113 544.499 0 0 1 6.25356 lb
-670.264 274.195 797.466 341.771 924.667 409.347 0 0 1 6.25356 lb
-588.113 544.499 756.39 476.923 924.667 409.347 0 0 1 6.25356 lb
--689.204 -237.261 -587.735 -114.393 -567.302 43.6423 0 0 1 6.25356 lb
--689.204 -237.261 -668.771 -79.2259 -567.302 43.6423 0 0 1 6.25356 lb
+574.035 177.301 622.149 225.748 670.264 274.195 1 0 0 2 lb
+694.579 115.483 682.421 194.839 670.264 274.195 1 0 0 2 lb
+280.402 10.3938 246.402 -6.60595 212.403 -23.6057 0 0 1 2 lb
+280.402 10.3938 283.493 -18.9695 286.584 -48.3327 0 0 1 2 lb
+212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 0 0 1 2 lb
+286.584 -48.3327 326.765 -79.2414 366.947 -110.15 0 0 1 2 lb
+286.584 -48.3327 278.857 -111.695 271.13 -175.058 0 0 1 2 lb
+438.037 -88.514 417.946 -142.604 397.855 -196.694 0 0 1 2 lb
+438.037 -88.514 402.492 -99.332 366.947 -110.15 0 0 1 2 lb
+397.855 -196.694 382.401 -153.422 366.947 -110.15 0 0 1 2 lb
+366.947 -110.15 319.038 -142.604 271.13 -175.058 0 0 1 2 lb
+271.13 -175.058 274.221 -213.694 277.311 -252.33 0 0 1 2 lb
+271.13 -175.058 238.675 -190.512 206.221 -205.967 0 0 1 2 lb
+277.311 -252.33 241.766 -229.149 206.221 -205.967 0 0 1 2 lb
+-840.856 -246.718 -804.351 -66.7145 -767.847 113.289 1 0 0 2 lb
+-579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 1 2 lb
+-579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 1 2 lb
+-767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 1 2 lb
+906.312 201.403 946.592 42.798 986.873 -115.807 0 0 1 2 lb
+906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0 1 2 lb
+986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0 1 2 lb
+-470.779 158.605 -390.218 50.3508 -309.657 -57.9033 1 0 0 2 lb
+422.945 521.129 208.955 541.269 -5.03507 561.41 0 0 1 2 lb
+422.945 521.129 376.371 417.911 329.797 314.692 0 0 1 2 lb
+422.945 521.129 474.554 276.928 526.164 32.7279 0 0 1 2 lb
+-5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0 0 1 2 lb
+329.797 314.692 130.912 317.209 -67.9734 319.727 0 0 1 2 lb
+-67.9734 319.727 229.095 176.227 526.164 32.7279 0 0 1 2 lb
+762.812 -17.6227 644.488 7.5526 526.164 32.7279 0 0 1 2 lb
+762.812 -17.6227 746.448 -162.381 730.084 -307.139 0 0 1 2 lb
+526.164 32.7279 470.779 -128.394 415.393 -289.516 0 0 1 2 lb
+730.084 -307.139 572.738 -298.327 415.393 -289.516 0 0 1 2 lb
+415.393 -289.516 173.71 -318.468 -67.9734 -347.42 1 0 0 2 lb
+-67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0 0 1 2 lb
+-67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0 0 1 2 lb
+-309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0 0 1 2 lb
+-323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0 0 1 2 lb
+-26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 0 0 1 2 lb
+-26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 0 0 1 2 lb
+-26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 0 0 1 2 lb
+-26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 0 0 1 2 lb
+116.407 -173.66 158.808 -67.6589 201.208 38.3422 0 0 1 2 lb
+-262.548 107.243 -137.997 120.493 -13.4452 133.743 0 0 1 2 lb
+-262.548 107.243 -221.472 176.144 -180.397 245.045 0 0 1 2 lb
+-13.4452 133.743 -96.9211 189.394 -180.397 245.045 0 0 1 2 lb
+-180.397 245.045 -142.256 345.099 -132.697 451.748 0 0 1 2 lb
+-180.397 245.045 -170.838 351.694 -132.697 451.748 0 0 1 2 lb
+-416.25 345.746 -274.474 398.747 -132.697 451.748 0 0 1 2 lb
+-416.25 345.746 -393.725 457.048 -371.2 568.349 0 0 1 2 lb
+-132.697 451.748 -251.948 510.048 -371.2 568.349 0 0 1 2 lb
+670.264 274.195 629.188 409.347 588.113 544.499 0 0 1 2 lb
+670.264 274.195 797.466 341.771 924.667 409.347 0 0 1 2 lb
+588.113 544.499 756.39 476.923 924.667 409.347 0 0 1 2 lb
+-689.204 -237.261 -614.799 -102.648 -567.302 43.6423 0 0 1 2 lb
+-689.204 -237.261 -641.707 -90.9706 -567.302 43.6423 0 0 1 2 lb
 grestore
 %Nodes:
 gsave
--567.302 43.6423 20.8452 0 0 0 nc
--689.204 -237.261 20.8452 0 0 0 nc
-924.667 409.347 20.8452 0 0 1 nc
-588.113 544.499 20.8452 0 0 1 nc
-670.264 274.195 20.8452 0 0 1 nc
--371.2 568.349 20.8452 1 1 0 nc
--132.697 451.748 20.8452 1 1 0 nc
--416.25 345.746 20.8452 1 1 0 nc
--180.397 245.045 20.8452 1 1 0 nc
--13.4452 133.743 20.8452 1 1 0 nc
--262.548 107.243 20.8452 1 1 0 nc
-201.208 38.3422 20.8452 1 1 0 nc
-116.407 -173.66 20.8452 1 1 0 nc
--26.6953 -19.9585 20.8452 1 1 0 nc
--539.894 -262.64 20.8452 0 0.5 0 nc
--323.543 -433.964 20.8452 0 0.5 0 nc
--309.657 -57.9033 20.8452 0 0.5 0 nc
--67.9734 -347.42 20.8452 0 0.5 0 nc
-415.393 -289.516 20.8452 0.5 0 0 nc
-730.084 -307.139 20.8452 0.5 0 0 nc
-526.164 32.7279 20.8452 0.5 0 0 nc
-762.812 -17.6227 20.8452 0.5 0 0 nc
--67.9734 319.727 20.8452 0.5 0 0 nc
-329.797 314.692 20.8452 0.5 0 0 nc
--5.03507 561.41 20.8452 0.5 0 0 nc
-422.945 521.129 20.8452 0.5 0 0 nc
--470.779 158.605 20.8452 0 1 1 nc
-986.873 -115.807 20.8452 0.5 0 0 nc
-906.312 201.403 20.8452 0.5 0 0 nc
--767.847 113.289 20.8452 0 1 1 nc
--579.033 445.603 20.8452 0 1 1 nc
--840.856 -246.718 20.8452 1 0 1 nc
-206.221 -205.967 20.8452 0 0 0.5 nc
-277.311 -252.33 20.8452 0 0 0.5 nc
-271.13 -175.058 20.8452 0 0 0.5 nc
-366.947 -110.15 20.8452 0 0 0.5 nc
-397.855 -196.694 20.8452 0 0 0.5 nc
-438.037 -88.514 20.8452 0 0 0.5 nc
-286.584 -48.3327 20.8452 0 0 0.5 nc
-212.403 -23.6057 20.8452 0 0 0.5 nc
-280.402 10.3938 20.8452 0 0 0.5 nc
-694.579 115.483 20.8452 1 0 0 nc
-574.035 177.301 20.8452 0 1 0 nc
+-567.302 43.6423 20 0 0 0 nc
+-689.204 -237.261 20 0 0 0 nc
+924.667 409.347 20 0 0 1 nc
+588.113 544.499 20 0 0 1 nc
+670.264 274.195 20 0 0 1 nc
+-371.2 568.349 20 1 1 0 nc
+-132.697 451.748 20 1 1 0 nc
+-416.25 345.746 20 1 1 0 nc
+-180.397 245.045 20 1 1 0 nc
+-13.4452 133.743 20 1 1 0 nc
+-262.548 107.243 20 1 1 0 nc
+201.208 38.3422 20 1 1 0 nc
+116.407 -173.66 20 1 1 0 nc
+-26.6953 -19.9585 20 1 1 0 nc
+-539.894 -262.64 20 0 0.5 0 nc
+-323.543 -433.964 20 0 0.5 0 nc
+-309.657 -57.9033 20 0 0.5 0 nc
+-67.9734 -347.42 20 0 0.5 0 nc
+415.393 -289.516 20 0.5 0 0 nc
+730.084 -307.139 20 0.5 0 0 nc
+526.164 32.7279 20 0.5 0 0 nc
+762.812 -17.6227 20 0.5 0 0 nc
+-67.9734 319.727 20 0.5 0 0 nc
+329.797 314.692 20 0.5 0 0 nc
+-5.03507 561.41 20 0.5 0 0 nc
+422.945 521.129 20 0.5 0 0 nc
+-470.779 158.605 20 0 1 1 nc
+986.873 -115.807 20 0.5 0 0 nc
+906.312 201.403 20 0.5 0 0 nc
+-767.847 113.289 20 0 1 1 nc
+-579.033 445.603 20 0 1 1 nc
+-840.856 -246.718 20 1 0 1 nc
+206.221 -205.967 20 0 0 0.5 nc
+277.311 -252.33 20 0 0 0.5 nc
+271.13 -175.058 20 0 0 0.5 nc
+366.947 -110.15 20 0 0 0.5 nc
+397.855 -196.694 20 0 0 0.5 nc
+438.037 -88.514 20 0 0 0.5 nc
+286.584 -48.3327 20 0 0 0.5 nc
+212.403 -23.6057 20 0 0 0.5 nc
+280.402 10.3938 20 0 0 0.5 nc
+694.579 115.483 20 1 0 0 nc
+574.035 177.301 20 0 1 0 nc
 grestore
 grestore
Index: doc/images/node_biconnected_components.eps
===================================================================
--- doc/images/node_biconnected_components.eps	(revision 1045)
+++ doc/images/node_biconnected_components.eps	(revision 587)
@@ -1,5 +1,5 @@
 %!PS-Adobe-2.0 EPSF-2.0
 %%Creator: LEMON, graphToEps()
-%%CreationDate: Fri Mar  8 00:18:43 2013
+%%CreationDate: Fri Nov  4 13:47:12 2005
 %%BoundingBox: 0 0 842 596
 %%EndComments
@@ -54,105 +54,105 @@
 %Edges:
 gsave
-574.035 177.301 622.149 225.748 670.264 274.195 0 1 0 6.25356 lb
-694.579 115.483 682.421 194.839 670.264 274.195 1 0 0 6.25356 lb
-280.402 10.3938 246.402 -6.60595 212.403 -23.6057 1 1 0.5 6.25356 lb
-280.402 10.3938 283.493 -18.9695 286.584 -48.3327 1 1 0.5 6.25356 lb
-212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 1 1 0.5 6.25356 lb
-286.584 -48.3327 326.765 -79.2414 366.947 -110.15 1 0.5 1 6.25356 lb
-286.584 -48.3327 278.857 -111.695 271.13 -175.058 1 0.5 1 6.25356 lb
-438.037 -88.514 417.946 -142.604 397.855 -196.694 0.5 0.5 1 6.25356 lb
-438.037 -88.514 402.492 -99.332 366.947 -110.15 0.5 0.5 1 6.25356 lb
-397.855 -196.694 382.401 -153.422 366.947 -110.15 0.5 0.5 1 6.25356 lb
-366.947 -110.15 319.038 -142.604 271.13 -175.058 1 0.5 1 6.25356 lb
-271.13 -175.058 274.221 -213.694 277.311 -252.33 0.5 1 1 6.25356 lb
-271.13 -175.058 238.675 -190.512 206.221 -205.967 0.5 1 1 6.25356 lb
-277.311 -252.33 241.766 -229.149 206.221 -205.967 0.5 1 1 6.25356 lb
--840.856 -246.718 -804.351 -66.7145 -767.847 113.289 0 0.5 0 6.25356 lb
--579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 0.5 6.25356 lb
--579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 0.5 6.25356 lb
--767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 0.5 6.25356 lb
-906.312 201.403 946.592 42.798 986.873 -115.807 0 0.5 0.5 6.25356 lb
-906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0.5 0.5 6.25356 lb
-986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0.5 0.5 6.25356 lb
--470.779 158.605 -390.218 50.3508 -309.657 -57.9033 0.5 0.5 0 6.25356 lb
-422.945 521.129 208.955 541.269 -5.03507 561.41 0.5 0 0.5 6.25356 lb
-422.945 521.129 376.371 417.911 329.797 314.692 0.5 0 0.5 6.25356 lb
-422.945 521.129 474.554 276.928 526.164 32.7279 0.5 0 0.5 6.25356 lb
--5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0.5 0 0.5 6.25356 lb
-329.797 314.692 130.912 317.209 -67.9734 319.727 0.5 0 0.5 6.25356 lb
--67.9734 319.727 229.095 176.227 526.164 32.7279 0.5 0 0.5 6.25356 lb
-762.812 -17.6227 644.488 7.5526 526.164 32.7279 0.5 0.5 0.5 6.25356 lb
-762.812 -17.6227 746.448 -162.381 730.084 -307.139 0.5 0.5 0.5 6.25356 lb
-526.164 32.7279 470.779 -128.394 415.393 -289.516 0.5 0.5 0.5 6.25356 lb
-730.084 -307.139 572.738 -298.327 415.393 -289.516 0.5 0.5 0.5 6.25356 lb
-415.393 -289.516 173.71 -318.468 -67.9734 -347.42 1 0.5 0.5 6.25356 lb
--67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0.5 1 0.5 6.25356 lb
--67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0.5 1 0.5 6.25356 lb
--309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0.5 1 0.5 6.25356 lb
--323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0.5 1 0.5 6.25356 lb
--26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 1 1 0 6.25356 lb
--26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 1 1 0 6.25356 lb
--26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 1 0 1 6.25356 lb
--26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 1 0 1 6.25356 lb
-116.407 -173.66 158.808 -67.6589 201.208 38.3422 1 1 0 6.25356 lb
--262.548 107.243 -137.997 120.493 -13.4452 133.743 1 0 1 6.25356 lb
--262.548 107.243 -221.472 176.144 -180.397 245.045 1 0 1 6.25356 lb
--13.4452 133.743 -96.9211 189.394 -180.397 245.045 1 0 1 6.25356 lb
--180.397 245.045 -113.509 338.465 -132.697 451.748 0 1 1 6.25356 lb
--180.397 245.045 -199.585 358.328 -132.697 451.748 0 1 1 6.25356 lb
--416.25 345.746 -274.474 398.747 -132.697 451.748 0.5 0 0 6.25356 lb
--416.25 345.746 -393.725 457.048 -371.2 568.349 0.5 0 0 6.25356 lb
--132.697 451.748 -251.948 510.048 -371.2 568.349 0.5 0 0 6.25356 lb
-670.264 274.195 629.188 409.347 588.113 544.499 0 0 1 6.25356 lb
-670.264 274.195 797.466 341.771 924.667 409.347 0 0 1 6.25356 lb
-588.113 544.499 756.39 476.923 924.667 409.347 0 0 1 6.25356 lb
--689.204 -237.261 -587.735 -114.393 -567.302 43.6423 0 0 0 6.25356 lb
--689.204 -237.261 -668.771 -79.2259 -567.302 43.6423 0 0 0 6.25356 lb
+574.035 177.301 622.149 225.748 670.264 274.195 0 1 0 5 lb
+694.579 115.483 682.421 194.839 670.264 274.195 1 0 0 5 lb
+280.402 10.3938 246.402 -6.60595 212.403 -23.6057 1 1 0.5 5 lb
+280.402 10.3938 283.493 -18.9695 286.584 -48.3327 1 1 0.5 5 lb
+212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 1 1 0.5 5 lb
+286.584 -48.3327 326.765 -79.2414 366.947 -110.15 1 0.5 1 5 lb
+286.584 -48.3327 278.857 -111.695 271.13 -175.058 1 0.5 1 5 lb
+438.037 -88.514 417.946 -142.604 397.855 -196.694 0.5 0.5 1 5 lb
+438.037 -88.514 402.492 -99.332 366.947 -110.15 0.5 0.5 1 5 lb
+397.855 -196.694 382.401 -153.422 366.947 -110.15 0.5 0.5 1 5 lb
+366.947 -110.15 319.038 -142.604 271.13 -175.058 1 0.5 1 5 lb
+271.13 -175.058 274.221 -213.694 277.311 -252.33 0.5 1 1 5 lb
+271.13 -175.058 238.675 -190.512 206.221 -205.967 0.5 1 1 5 lb
+277.311 -252.33 241.766 -229.149 206.221 -205.967 0.5 1 1 5 lb
+-840.856 -246.718 -804.351 -66.7145 -767.847 113.289 0 0.5 0 5 lb
+-579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 0.5 5 lb
+-579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 0.5 5 lb
+-767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 0.5 5 lb
+906.312 201.403 946.592 42.798 986.873 -115.807 0 0.5 0.5 5 lb
+906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0.5 0.5 5 lb
+986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0.5 0.5 5 lb
+-470.779 158.605 -390.218 50.3508 -309.657 -57.9033 0.5 0.5 0 5 lb
+422.945 521.129 208.955 541.269 -5.03507 561.41 0.5 0 0.5 5 lb
+422.945 521.129 376.371 417.911 329.797 314.692 0.5 0 0.5 5 lb
+422.945 521.129 474.554 276.928 526.164 32.7279 0.5 0 0.5 5 lb
+-5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0.5 0 0.5 5 lb
+329.797 314.692 130.912 317.209 -67.9734 319.727 0.5 0 0.5 5 lb
+-67.9734 319.727 229.095 176.227 526.164 32.7279 0.5 0 0.5 5 lb
+762.812 -17.6227 644.488 7.5526 526.164 32.7279 0.5 0.5 0.5 5 lb
+762.812 -17.6227 746.448 -162.381 730.084 -307.139 0.5 0.5 0.5 5 lb
+526.164 32.7279 470.779 -128.394 415.393 -289.516 0.5 0.5 0.5 5 lb
+730.084 -307.139 572.738 -298.327 415.393 -289.516 0.5 0.5 0.5 5 lb
+415.393 -289.516 173.71 -318.468 -67.9734 -347.42 1 0.5 0.5 5 lb
+-67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0.5 1 0.5 5 lb
+-67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0.5 1 0.5 5 lb
+-309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0.5 1 0.5 5 lb
+-323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0.5 1 0.5 5 lb
+-26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 1 1 0 5 lb
+-26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 1 1 0 5 lb
+-26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 1 0 1 5 lb
+-26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 1 0 1 5 lb
+116.407 -173.66 158.808 -67.6589 201.208 38.3422 1 1 0 5 lb
+-262.548 107.243 -137.997 120.493 -13.4452 133.743 1 0 1 5 lb
+-262.548 107.243 -221.472 176.144 -180.397 245.045 1 0 1 5 lb
+-13.4452 133.743 -96.9211 189.394 -180.397 245.045 1 0 1 5 lb
+-180.397 245.045 -140.307 344.649 -132.697 451.748 0 1 1 5 lb
+-180.397 245.045 -172.787 352.144 -132.697 451.748 0 1 1 5 lb
+-416.25 345.746 -274.474 398.747 -132.697 451.748 0.5 0 0 5 lb
+-416.25 345.746 -393.725 457.048 -371.2 568.349 0.5 0 0 5 lb
+-132.697 451.748 -251.948 510.048 -371.2 568.349 0.5 0 0 5 lb
+670.264 274.195 629.188 409.347 588.113 544.499 0 0 1 5 lb
+670.264 274.195 797.466 341.771 924.667 409.347 0 0 1 5 lb
+588.113 544.499 756.39 476.923 924.667 409.347 0 0 1 5 lb
+-689.204 -237.261 -612.964 -103.444 -567.302 43.6423 0 0 0 5 lb
+-689.204 -237.261 -643.542 -90.1744 -567.302 43.6423 0 0 0 5 lb
 grestore
 %Nodes:
 gsave
--567.302 43.6423 20.8452 0 0 1 nc
--689.204 -237.261 20.8452 0 0 1 nc
-924.667 409.347 20.8452 0 0 1 nc
-588.113 544.499 20.8452 0 0 1 nc
-670.264 274.195 20.8452 1 0 0 nc
--371.2 568.349 20.8452 0 0 1 nc
--132.697 451.748 20.8452 1 0 0 nc
--416.25 345.746 20.8452 0 0 1 nc
--180.397 245.045 20.8452 1 0 0 nc
--13.4452 133.743 20.8452 0 0 1 nc
--262.548 107.243 20.8452 0 0 1 nc
-201.208 38.3422 20.8452 0 0 1 nc
-116.407 -173.66 20.8452 0 0 1 nc
--26.6953 -19.9585 20.8452 1 0 0 nc
--539.894 -262.64 20.8452 0 0 1 nc
--323.543 -433.964 20.8452 0 0 1 nc
--309.657 -57.9033 20.8452 1 0 0 nc
--67.9734 -347.42 20.8452 1 0 0 nc
-415.393 -289.516 20.8452 1 0 0 nc
-730.084 -307.139 20.8452 0 0 1 nc
-526.164 32.7279 20.8452 1 0 0 nc
-762.812 -17.6227 20.8452 1 0 0 nc
--67.9734 319.727 20.8452 0 0 1 nc
-329.797 314.692 20.8452 0 0 1 nc
--5.03507 561.41 20.8452 0 0 1 nc
-422.945 521.129 20.8452 0 0 1 nc
--470.779 158.605 20.8452 1 0 0 nc
-986.873 -115.807 20.8452 0 0 1 nc
-906.312 201.403 20.8452 0 0 1 nc
--767.847 113.289 20.8452 1 0 0 nc
--579.033 445.603 20.8452 0 0 1 nc
--840.856 -246.718 20.8452 0 0 1 nc
-206.221 -205.967 20.8452 0 0 1 nc
-277.311 -252.33 20.8452 0 0 1 nc
-271.13 -175.058 20.8452 1 0 0 nc
-366.947 -110.15 20.8452 1 0 0 nc
-397.855 -196.694 20.8452 0 0 1 nc
-438.037 -88.514 20.8452 0 0 1 nc
-286.584 -48.3327 20.8452 1 0 0 nc
-212.403 -23.6057 20.8452 0 0 1 nc
-280.402 10.3938 20.8452 0 0 1 nc
-694.579 115.483 20.8452 0 0 1 nc
-574.035 177.301 20.8452 0 0 1 nc
+-567.302 43.6423 20 0 0 1 nc
+-689.204 -237.261 20 0 0 1 nc
+924.667 409.347 20 0 0 1 nc
+588.113 544.499 20 0 0 1 nc
+670.264 274.195 20 1 0 0 nc
+-371.2 568.349 20 0 0 1 nc
+-132.697 451.748 20 1 0 0 nc
+-416.25 345.746 20 0 0 1 nc
+-180.397 245.045 20 1 0 0 nc
+-13.4452 133.743 20 0 0 1 nc
+-262.548 107.243 20 0 0 1 nc
+201.208 38.3422 20 0 0 1 nc
+116.407 -173.66 20 0 0 1 nc
+-26.6953 -19.9585 20 1 0 0 nc
+-539.894 -262.64 20 0 0 1 nc
+-323.543 -433.964 20 0 0 1 nc
+-309.657 -57.9033 20 1 0 0 nc
+-67.9734 -347.42 20 1 0 0 nc
+415.393 -289.516 20 1 0 0 nc
+730.084 -307.139 20 0 0 1 nc
+526.164 32.7279 20 1 0 0 nc
+762.812 -17.6227 20 1 0 0 nc
+-67.9734 319.727 20 0 0 1 nc
+329.797 314.692 20 0 0 1 nc
+-5.03507 561.41 20 0 0 1 nc
+422.945 521.129 20 0 0 1 nc
+-470.779 158.605 20 1 0 0 nc
+986.873 -115.807 20 0 0 1 nc
+906.312 201.403 20 0 0 1 nc
+-767.847 113.289 20 1 0 0 nc
+-579.033 445.603 20 0 0 1 nc
+-840.856 -246.718 20 0 0 1 nc
+206.221 -205.967 20 0 0 1 nc
+277.311 -252.33 20 0 0 1 nc
+271.13 -175.058 20 1 0 0 nc
+366.947 -110.15 20 1 0 0 nc
+397.855 -196.694 20 0 0 1 nc
+438.037 -88.514 20 0 0 1 nc
+286.584 -48.3327 20 1 0 0 nc
+212.403 -23.6057 20 0 0 1 nc
+280.402 10.3938 20 0 0 1 nc
+694.579 115.483 20 0 0 1 nc
+574.035 177.301 20 0 0 1 nc
 grestore
 grestore
Index: doc/images/strongly_connected_components.eps
===================================================================
--- doc/images/strongly_connected_components.eps	(revision 1045)
+++ doc/images/strongly_connected_components.eps	(revision 587)
@@ -1,5 +1,5 @@
 %!PS-Adobe-2.0 EPSF-2.0
 %%Creator: LEMON, graphToEps()
-%%CreationDate: Fri Mar  8 00:22:15 2013
+%%CreationDate: Fri Nov  4 13:47:12 2005
 %%BoundingBox: 0 0 842 596
 %%EndComments
@@ -54,126 +54,126 @@
 %Edges:
 gsave
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+2 setlinewidth 0 0 1 setrgbcolor newpath
 218.178 27.2723 moveto
-195.849 -31.0725 190.033 -46.2697 176.306 -82.1369 curveto stroke
-newpath 163.235 -116.291 moveto 165.206 -77.8889 lineto 187.405 -86.3849 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+192.373 -40.1551 188.622 -49.9556 169.228 -100.631 curveto stroke
+newpath 164.939 -111.838 moveto 165.492 -99.2013 lineto 172.964 -102.061 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 44.8044 15.5841 moveto
-109.705 19.9594 126.016 21.0591 166.493 23.7879 curveto stroke
-newpath 202.98 26.2477 moveto 167.292 11.9299 lineto 165.694 35.6458 lineto closepath fill
-4.56973 setlinewidth 1 0 0 setrgbcolor newpath
+119.293 20.6059 129.775 21.3125 186.25 25.1199 curveto stroke
+newpath 198.223 25.927 moveto 186.519 21.1289 lineto 185.981 29.1108 lineto closepath fill
+2 setlinewidth 1 0 0 setrgbcolor newpath
 218.178 27.2723 moveto
-281.264 -80.3935 289.87 -95.0808 338.092 -177.379 curveto stroke
-newpath 356.579 -208.932 moveto 327.837 -183.388 lineto 348.346 -171.371 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+285.395 -87.4449 290.763 -96.6058 348.102 -194.464 curveto stroke
+newpath 354.169 -204.818 moveto 344.651 -196.487 lineto 351.554 -192.442 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 157.79 -130.517 moveto
-114.446 -74.4692 104.358 -61.4239 76.4943 -25.394 curveto stroke
-newpath 54.1228 3.53455 moveto 85.8959 -18.1234 lineto 67.0928 -32.6646 lineto closepath fill
-4.56973 setlinewidth 1 0 0 setrgbcolor newpath
+108.71 -67.0521 102.27 -58.7243 64.3804 -9.72954 curveto stroke
+newpath 57.0394 -0.236898 moveto 67.5446 -7.28254 lineto 61.2162 -12.1765 lineto closepath fill
+2 setlinewidth 1 0 0 setrgbcolor newpath
 -105.193 -261.035 moveto
--39.4801 -139.85 -31.344 -124.846 20.1113 -29.9539 curveto stroke
-newpath 37.5434 2.19358 moveto 30.559 -35.6192 lineto 9.66361 -24.2886 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+-35.6576 -132.801 -30.5923 -123.459 29.5506 -12.5464 curveto stroke
+newpath 35.2708 -1.99743 moveto 33.0669 -14.4531 lineto 26.0343 -10.6397 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 -465.576 -42.8564 moveto
--550.335 -27.1603 -566.8 -24.1113 -625.027 -13.3286 curveto stroke
-newpath -660.985 -6.66971 moveto -622.863 -1.64245 lineto -627.191 -25.0148 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+-559.078 -25.5413 -569.47 -23.6169 -644.498 -9.72286 curveto stroke
+newpath -656.297 -7.5378 moveto -643.77 -5.78973 lineto -645.226 -13.656 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 -574.666 -153.893 moveto
--535.911 -114.447 -524.692 -103.027 -501.88 -79.8085 curveto stroke
-newpath -476.251 -53.7222 moveto -493.402 -88.1377 lineto -510.358 -71.4793 lineto closepath fill
-4.56973 setlinewidth 1 0 0 setrgbcolor newpath
+-528.842 -107.252 -521.515 -99.794 -488.002 -65.683 curveto stroke
+newpath -479.592 -57.123 moveto -485.149 -68.4863 lineto -490.856 -62.8797 lineto closepath fill
+2 setlinewidth 1 0 0 setrgbcolor newpath
 -490.901 120.777 moveto
--481.623 60.8277 -479.143 44.8049 -473.499 8.33636 curveto stroke
-newpath -467.906 -27.8032 moveto -485.244 6.51862 lineto -461.754 10.1541 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+-480.122 51.1328 -478.519 40.7713 -470.47 -11.2329 curveto stroke
+newpath -468.635 -23.0917 moveto -474.423 -11.8447 lineto -466.517 -10.6212 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 -675.963 -3.89604 moveto
--637.405 -60.9909 -628.201 -74.6206 -603.658 -110.963 curveto stroke
-newpath -583.191 -141.27 moveto -613.507 -117.615 lineto -593.808 -104.312 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+-632.116 -68.8235 -626.228 -77.5422 -592.575 -127.374 curveto stroke
+newpath -585.859 -137.319 moveto -595.89 -129.612 lineto -589.26 -125.135 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 -490.901 120.777 moveto
--439.75 208.465 -431.238 223.057 -394.278 286.417 curveto stroke
-newpath -375.851 318.006 moveto -384.012 280.429 lineto -404.543 292.406 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+-435.445 215.844 -430.107 224.995 -384.3 303.522 curveto stroke
+newpath -378.253 313.887 moveto -380.845 301.507 lineto -387.755 305.537 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 -266.879 114.933 moveto
--358.311 117.318 -375.109 117.756 -439.117 119.426 curveto stroke
-newpath -475.674 120.38 moveto -438.807 131.307 lineto -439.426 107.545 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+-367.067 117.547 -377.642 117.822 -458.912 119.943 curveto stroke
+newpath -470.908 120.255 moveto -458.807 123.941 lineto -459.016 115.944 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 -368.176 331.163 moveto
--326.156 241.466 -318.997 226.186 -288.855 161.843 curveto stroke
-newpath -273.341 128.727 moveto -299.617 156.801 lineto -278.092 166.885 lineto closepath fill
-4.56973 setlinewidth 1 0 0 setrgbcolor newpath
+-322.511 233.685 -318.018 224.095 -280.454 143.911 curveto stroke
+newpath -275.364 133.044 moveto -284.076 142.214 lineto -276.832 145.608 lineto closepath fill
+2 setlinewidth 1 0 0 setrgbcolor newpath
 -266.879 114.933 moveto
--226.764 227.755 -221.069 243.774 -190.728 329.107 curveto stroke
-newpath -178.477 363.564 moveto -179.53 325.126 lineto -201.926 333.089 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+-224.004 235.52 -220.448 245.52 -184.094 347.765 curveto stroke
+newpath -180.074 359.072 moveto -180.325 346.425 lineto -187.863 349.105 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 -251.294 -335.059 moveto
--198.044 -308.079 -183.61 -300.766 -151.402 -284.448 curveto stroke
-newpath -118.781 -267.92 moveto -146.031 -295.049 lineto -156.774 -273.846 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+-189.25 -303.624 -179.902 -298.887 -133.738 -275.498 curveto stroke
+newpath -123.034 -270.074 moveto -131.93 -279.066 lineto -135.546 -271.93 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 -389.604 -136.361 moveto
--332.039 -219.059 -322.392 -232.919 -280.889 -292.543 curveto stroke
-newpath -259.996 -322.557 moveto -290.643 -299.333 lineto -271.134 -285.753 lineto closepath fill
-4.56973 setlinewidth 1 0 0 setrgbcolor newpath
+-327.15 -226.083 -321.098 -234.777 -269.576 -308.795 curveto stroke
+newpath -262.72 -318.644 moveto -272.859 -311.081 lineto -266.293 -306.51 lineto closepath fill
+2 setlinewidth 1 0 0 setrgbcolor newpath
 5.84406 175.322 moveto
--70.5724 261.706 -81.8227 274.423 -139.051 339.116 curveto stroke
-newpath -163.281 366.507 moveto -130.149 346.991 lineto -147.953 331.242 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+-76.0754 267.926 -83.1051 275.873 -152.172 353.948 curveto stroke
+newpath -160.122 362.936 moveto -149.176 356.598 lineto -155.168 351.298 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 169.478 311.683 moveto
-103.641 256.819 90.7821 246.103 45.6398 208.485 curveto stroke
-newpath 17.546 185.074 moveto 38.0313 217.615 lineto 53.2483 199.355 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+96.8003 251.119 88.6819 244.353 30.4273 195.808 curveto stroke
+newpath 21.2086 188.126 moveto 27.8666 198.881 lineto 32.988 192.735 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 342.851 111.037 moveto
-269.224 196.246 258.132 209.083 203.347 272.486 curveto stroke
-newpath 179.437 300.157 moveto 212.34 280.257 lineto 194.354 264.716 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+263.766 202.563 256.831 210.589 190.4 287.47 curveto stroke
+newpath 182.554 296.55 moveto 193.427 290.085 lineto 187.373 284.855 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 5.84406 175.322 moveto
-155.419 146.79 172.221 143.585 291.966 120.743 curveto stroke
-newpath 327.888 113.891 moveto 289.739 109.069 lineto 294.193 132.418 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+163.16 145.314 173.605 143.321 311.418 117.033 curveto stroke
+newpath 323.205 114.784 moveto 310.668 113.104 lineto 312.167 120.962 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 342.851 111.037 moveto
-490.978 6.99574 505.015 -2.86383 627.727 -89.0547 curveto stroke
-newpath 657.653 -110.074 moveto 620.896 -98.7802 lineto 634.558 -79.3291 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+497.255 2.58683 505.964 -3.53033 643.932 -100.436 curveto stroke
+newpath 653.752 -107.334 moveto 641.633 -103.71 lineto 646.231 -97.163 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 364.28 -222.074 moveto
-354.807 -74.8128 353.709 -57.7536 346.177 59.3416 curveto stroke
-newpath 343.829 95.836 moveto 358.037 60.1045 lineto 334.316 58.5786 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+354.298 -66.9063 353.616 -56.2971 344.905 79.1029 curveto stroke
+newpath 344.135 91.0781 moveto 348.897 79.3597 lineto 340.914 78.8461 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 670.118 -118.829 moveto
-535.595 -164.241 519.412 -169.704 413.361 -205.505 curveto stroke
-newpath 378.712 -217.202 moveto 409.559 -194.245 lineto 417.162 -216.766 lineto closepath fill
-4.56973 setlinewidth 1 0 0 setrgbcolor newpath
+528.037 -166.793 517.967 -170.192 394.599 -211.839 curveto stroke
+newpath 383.229 -215.677 moveto 393.32 -208.049 lineto 395.878 -215.629 lineto closepath fill
+2 setlinewidth 1 0 0 setrgbcolor newpath
 -105.193 -261.035 moveto
-110.939 -243.099 128.069 -241.677 312.655 -226.358 curveto stroke
-newpath 349.1 -223.334 moveto 313.638 -238.202 lineto 311.672 -214.514 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+118.401 -242.479 129.015 -241.598 332.39 -224.721 curveto stroke
+newpath 344.348 -223.728 moveto 332.72 -228.707 lineto 332.059 -220.734 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 -105.193 -261.035 moveto
--156.746 -168.566 -164.987 -153.784 -202.693 -86.1539 curveto stroke
-newpath -220.5 -54.2129 moveto -192.312 -80.3665 lineto -213.073 -91.9413 lineto closepath fill
-4.56973 setlinewidth 0 0 1 setrgbcolor newpath
+-160.867 -161.176 -166.028 -151.918 -212.336 -68.858 curveto stroke
+newpath -218.179 -58.3769 moveto -208.842 -66.9102 lineto -215.829 -70.8058 lineto closepath fill
+2 setlinewidth 0 0 1 setrgbcolor newpath
 -227.918 -40.9084 moveto
--290.327 -77.7521 -304.558 -86.1532 -344.995 -110.026 curveto stroke
-newpath -376.487 -128.617 moveto -351.037 -99.7914 lineto -338.953 -120.26 lineto closepath fill
+-298.35 -82.4884 -307.42 -87.8432 -362.048 -120.093 curveto stroke
+newpath -372.381 -126.193 moveto -364.081 -116.648 lineto -360.014 -123.537 lineto closepath fill
 grestore
 %Nodes:
 gsave
--389.604 -136.361 15.2324 0 1 0 nc
--227.918 -40.9084 15.2324 0 1 0 nc
--105.193 -261.035 15.2324 0 1 0 nc
-364.28 -222.074 15.2324 1 1 0 nc
-670.118 -118.829 15.2324 1 1 0 nc
-342.851 111.037 15.2324 1 1 0 nc
-5.84406 175.322 15.2324 1 1 0 nc
-169.478 311.683 15.2324 1 1 0 nc
--173.374 377.916 15.2324 1 0 1 nc
--251.294 -335.059 15.2324 0 1 0 nc
--266.879 114.933 15.2324 0 0 0 nc
--368.176 331.163 15.2324 0 0 0 nc
--490.901 120.777 15.2324 0 0 0 nc
--574.666 -153.893 15.2324 1 0 0 nc
--675.963 -3.89604 15.2324 1 0 0 nc
--465.576 -42.8564 15.2324 1 0 0 nc
-44.8044 15.5841 15.2324 0 0 1 nc
-157.79 -130.517 15.2324 0 0 1 nc
-218.178 27.2723 15.2324 0 0 1 nc
+-389.604 -136.361 20 0 1 0 nc
+-227.918 -40.9084 20 0 1 0 nc
+-105.193 -261.035 20 0 1 0 nc
+364.28 -222.074 20 1 1 0 nc
+670.118 -118.829 20 1 1 0 nc
+342.851 111.037 20 1 1 0 nc
+5.84406 175.322 20 1 1 0 nc
+169.478 311.683 20 1 1 0 nc
+-173.374 377.916 20 1 0 1 nc
+-251.294 -335.059 20 0 1 0 nc
+-266.879 114.933 20 0 0 0 nc
+-368.176 331.163 20 0 0 0 nc
+-490.901 120.777 20 0 0 0 nc
+-574.666 -153.893 20 1 0 0 nc
+-675.963 -3.89604 20 1 0 0 nc
+-465.576 -42.8564 20 1 0 0 nc
+44.8044 15.5841 20 0 0 1 nc
+157.79 -130.517 20 0 0 1 nc
+218.178 27.2723 20 0 0 1 nc
 grestore
 grestore
Index: doc/mainpage.dox.in
===================================================================
--- doc/mainpage.dox.in	(revision 1053)
+++ doc/mainpage.dox.in	(revision 930)
@@ -26,5 +26,5 @@
 It is a C++ template library providing efficient implementations of common
 data structures and algorithms with focus on combinatorial optimization
-tasks connected mainly with graphs and networks \cite DezsoJuttnerKovacs11Lemon.
+tasks connected mainly with graphs and networks.
 
 <b>
@@ -38,10 +38,10 @@
 The project is maintained by the
 <a href="http://www.cs.elte.hu/egres/">Egerv&aacute;ry Research Group on
-Combinatorial Optimization</a> \cite egres
+Combinatorial Optimization</a> \ref egres
 at the Operations Research Department of the
 <a href="http://www.elte.hu/en/">E&ouml;tv&ouml;s Lor&aacute;nd University</a>,
 Budapest, Hungary.
 LEMON is also a member of the <a href="http://www.coin-or.org/">COIN-OR</a>
-initiative \cite coinor.
+initiative \ref coinor.
 
 \section howtoread How to Read the Documentation
Index: doc/min_cost_flow.dox
===================================================================
--- doc/min_cost_flow.dox	(revision 1053)
+++ doc/min_cost_flow.dox	(revision 1002)
@@ -27,5 +27,5 @@
 minimum total cost from a set of supply nodes to a set of demand nodes
 in a network with capacity constraints (lower and upper bounds)
-and arc costs \cite amo93networkflows.
+and arc costs \ref amo93networkflows.
 
 Formally, let \f$G=(V,A)\f$ be a digraph, \f$lower: A\rightarrow\mathbf{R}\f$,
Index: doc/references.bib
===================================================================
--- doc/references.bib	(revision 1051)
+++ doc/references.bib	(revision 1002)
@@ -20,26 +20,4 @@
                   {O}perations {R}esearch},
   url =          {http://www.coin-or.org/}
-}
-
-
-%%%%% Papers related to LEMON %%%%%
-
-@article{DezsoJuttnerKovacs11Lemon,
-  author =       {B. Dezs{\H o} and A. J\"uttner and P. Kov\'acs},
-  title =        {{LEMON} -- an open source {C++} graph template library},
-  journal =      {Electronic Notes in Theoretical Computer Science},
-  volume =       {264},
-  pages =        {23--45},
-  year =         {2011},
-  note =         {Proc. 2nd Workshop on Generative Technologies}
-}
-
-@article{KiralyKovacs12MCF,
-  author =       {Z. Kir\'aly and P. Kov\'acs},
-  title =        {Efficient implementations of minimum-cost flow algorithms},
-  journal =      {Acta Universitatis Sapientiae, Informatica},
-  year =         {2012},
-  volume =       {4},
-  pages =        {67--118}
 }
 
Index: lemon/CMakeLists.txt
===================================================================
--- lemon/CMakeLists.txt	(revision 1062)
+++ lemon/CMakeLists.txt	(revision 981)
@@ -37,5 +37,5 @@
 IF(LEMON_HAVE_CPLEX)
   SET(LEMON_SOURCES ${LEMON_SOURCES} cplex.cc)
-  INCLUDE_DIRECTORIES(${ILOG_INCLUDE_DIRS})
+  INCLUDE_DIRECTORIES(${CPLEX_INCLUDE_DIRS})
 ENDIF()
 
Index: lemon/base.cc
===================================================================
--- lemon/base.cc	(revision 1054)
+++ lemon/base.cc	(revision 477)
@@ -22,5 +22,4 @@
 #include<lemon/tolerance.h>
 #include<lemon/core.h>
-#include<lemon/time_measure.h>
 namespace lemon {
 
@@ -33,5 +32,3 @@
 #endif
 
-  TimeStamp::Format TimeStamp::_format = TimeStamp::NORMAL;
-
 } //namespace lemon
Index: lemon/capacity_scaling.h
===================================================================
--- lemon/capacity_scaling.h	(revision 1053)
+++ lemon/capacity_scaling.h	(revision 1070)
@@ -67,9 +67,7 @@
   /// \ref CapacityScaling implements the capacity scaling version
   /// of the successive shortest path algorithm for finding a
-  /// \ref min_cost_flow "minimum cost flow" \cite amo93networkflows,
-  /// \cite edmondskarp72theoretical. It is an efficient dual
-  /// solution method, which runs in polynomial time
-  /// \f$O(e\log U (n+e)\log n)\f$, where <i>U</i> denotes the maximum
-  /// of node supply and arc capacity values.
+  /// \ref min_cost_flow "minimum cost flow" \ref amo93networkflows,
+  /// \ref edmondskarp72theoretical. It is an efficient dual
+  /// solution method.
   ///
   /// This algorithm is typically slower than \ref CostScaling and
@@ -740,4 +738,9 @@
       if (_sum_supply > 0) return INFEASIBLE;
 
+      // Check lower and upper bounds
+      LEMON_DEBUG(checkBoundMaps(),
+          "Upper bounds must be greater or equal to the lower bounds");
+
+
       // Initialize vectors
       for (int i = 0; i != _root; ++i) {
@@ -832,4 +835,13 @@
 
       return OPTIMAL;
+    }
+    
+    // Check if the upper bound is greater or equal to the lower bound
+    // on each arc.
+    bool checkBoundMaps() {
+      for (int j = 0; j != _res_arc_num; ++j) {
+        if (_upper[j] < _lower[j]) return false;
+      }
+      return true;
     }
 
Index: lemon/cbc.h
===================================================================
--- lemon/cbc.h	(revision 1064)
+++ lemon/cbc.h	(revision 877)
@@ -17,4 +17,5 @@
  */
 
+// -*- C++ -*-
 #ifndef LEMON_CBC_H
 #define LEMON_CBC_H
Index: lemon/concepts/bpgraph.h
===================================================================
--- lemon/concepts/bpgraph.h	(revision 1049)
+++ lemon/concepts/bpgraph.h	(revision 1028)
@@ -998,5 +998,5 @@
       /// \brief The base node of the iterator.
       ///
-      /// Returns the base node of the given incoming arc iterator
+      /// Returns the base node of the given incomming arc iterator
       /// (i.e. the target node of the corresponding arc).
       Node baseNode(InArcIt) const { return INVALID; }
@@ -1004,5 +1004,5 @@
       /// \brief The running node of the iterator.
       ///
-      /// Returns the running node of the given incoming arc iterator
+      /// Returns the running node of the given incomming arc iterator
       /// (i.e. the source node of the corresponding arc).
       Node runningNode(InArcIt) const { return INVALID; }
Index: lemon/concepts/digraph.h
===================================================================
--- lemon/concepts/digraph.h	(revision 1049)
+++ lemon/concepts/digraph.h	(revision 877)
@@ -410,5 +410,5 @@
       /// \brief The base node of the iterator.
       ///
-      /// Returns the base node of the given incoming arc iterator
+      /// Returns the base node of the given incomming arc iterator
       /// (i.e. the target node of the corresponding arc).
       Node baseNode(InArcIt) const { return INVALID; }
@@ -416,5 +416,5 @@
       /// \brief The running node of the iterator.
       ///
-      /// Returns the running node of the given incoming arc iterator
+      /// Returns the running node of the given incomming arc iterator
       /// (i.e. the source node of the corresponding arc).
       Node runningNode(InArcIt) const { return INVALID; }
Index: lemon/concepts/graph.h
===================================================================
--- lemon/concepts/graph.h	(revision 1049)
+++ lemon/concepts/graph.h	(revision 1018)
@@ -758,5 +758,5 @@
       /// \brief The base node of the iterator.
       ///
-      /// Returns the base node of the given incoming arc iterator
+      /// Returns the base node of the given incomming arc iterator
       /// (i.e. the target node of the corresponding arc).
       Node baseNode(InArcIt) const { return INVALID; }
@@ -764,5 +764,5 @@
       /// \brief The running node of the iterator.
       ///
-      /// Returns the running node of the given incoming arc iterator
+      /// Returns the running node of the given incomming arc iterator
       /// (i.e. the source node of the corresponding arc).
       Node runningNode(InArcIt) const { return INVALID; }
Index: lemon/concepts/graph_components.h
===================================================================
--- lemon/concepts/graph_components.h	(revision 1049)
+++ lemon/concepts/graph_components.h	(revision 1028)
@@ -876,13 +876,13 @@
       void next(Arc&) const {}
 
-      /// \brief Return the first arc incoming to the given node.
-      ///
-      /// This function gives back the first arc incoming to the
+      /// \brief Return the first arc incomming to the given node.
+      ///
+      /// This function gives back the first arc incomming to the
       /// given node.
       void firstIn(Arc&, const Node&) const {}
 
-      /// \brief Return the next arc incoming to the given node.
-      ///
-      /// This function gives back the next arc incoming to the
+      /// \brief Return the next arc incomming to the given node.
+      ///
+      /// This function gives back the next arc incomming to the
       /// given node.
       void nextIn(Arc&) const {}
Index: lemon/config.h.in
===================================================================
--- lemon/config.h.in	(revision 1064)
+++ lemon/config.h.in	(revision 981)
@@ -7,6 +7,4 @@
 #cmakedefine LEMON_HAVE_CLP 1
 #cmakedefine LEMON_HAVE_CBC 1
-#cmakedefine LEMON_DEFAULT_LP @LEMON_DEFAULT_LP@
-#cmakedefine LEMON_DEFAULT_MIP @LEMON_DEFAULT_MIP@
 #cmakedefine LEMON_USE_PTHREAD 1
 #cmakedefine LEMON_USE_WIN32_THREADS 1
Index: lemon/core.h
===================================================================
--- lemon/core.h	(revision 1069)
+++ lemon/core.h	(revision 1027)
@@ -36,9 +36,4 @@
 #ifdef _MSC_VER
 #pragma warning( disable : 4250 4355 4503 4800 4996 )
-#endif
-
-#ifdef __GNUC__
-// Needed by the [DI]GRAPH_TYPEDEFS marcos for gcc 4.8
-#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
 #endif
 
Index: lemon/cost_scaling.h
===================================================================
--- lemon/cost_scaling.h	(revision 1053)
+++ lemon/cost_scaling.h	(revision 1070)
@@ -92,11 +92,9 @@
   /// \ref CostScaling implements a cost scaling algorithm that performs
   /// push/augment and relabel operations for finding a \ref min_cost_flow
-  /// "minimum cost flow" \cite amo93networkflows, \cite goldberg90approximation,
-  /// \cite goldberg97efficient, \cite bunnagel98efficient.
+  /// "minimum cost flow" \ref amo93networkflows, \ref goldberg90approximation,
+  /// \ref goldberg97efficient, \ref bunnagel98efficient.
   /// It is a highly efficient primal-dual solution method, which
   /// can be viewed as the generalization of the \ref Preflow
   /// "preflow push-relabel" algorithm for the maximum flow problem.
-  /// It is a polynomial algorithm, its running time complexity is
-  /// \f$O(n^2e\log(nK))\f$, where <i>K</i> denotes the maximum arc cost.
   ///
   /// In general, \ref NetworkSimplex and \ref CostScaling are the fastest
@@ -764,4 +762,8 @@
       if (_sum_supply > 0) return INFEASIBLE;
 
+      // Check lower and upper bounds
+      LEMON_DEBUG(checkBoundMaps(),
+          "Upper bounds must be greater or equal to the lower bounds");
+
 
       // Initialize vectors
@@ -899,4 +901,13 @@
 
       return OPTIMAL;
+    }
+    
+    // Check if the upper bound is greater or equal to the lower bound
+    // on each arc.
+    bool checkBoundMaps() {
+      for (int j = 0; j != _res_arc_num; ++j) {
+        if (_upper[j] < _lower[j]) return false;
+      }
+      return true;
     }
 
@@ -1272,5 +1283,5 @@
           _buckets[r] = _bucket_next[u];
 
-          // Search the incoming arcs of u
+          // Search the incomming arcs of u
           LargeCost pi_u = _pi[u];
           int last_out = _first_out[u+1];
Index: lemon/cplex.cc
===================================================================
--- lemon/cplex.cc	(revision 1063)
+++ lemon/cplex.cc	(revision 1016)
@@ -492,15 +492,4 @@
                    _message_enabled ? CPX_ON : CPX_OFF);
   }
-
-  void CplexBase::_write(std::string file, std::string format) const
-  {
-    if(format == "MPS" || format == "LP")
-      CPXwriteprob(cplexEnv(), cplexLp(), file.c_str(), format.c_str());
-    else if(format == "SOL")
-      CPXsolwrite(cplexEnv(), cplexLp(), file.c_str());
-    else throw UnsupportedFormatError(format);
-  }
-
-
 
   // CplexLp members
Index: lemon/cplex.h
===================================================================
--- lemon/cplex.h	(revision 1063)
+++ lemon/cplex.h	(revision 746)
@@ -151,6 +151,4 @@
     bool _message_enabled;
 
-    void _write(std::string file, std::string format) const;
-
   public:
 
@@ -173,17 +171,4 @@
     const cpxlp* cplexLp() const { return _prob; }
 
-#ifdef DOXYGEN
-    /// Write the problem or the solution to a file in the given format
-
-    /// This function writes the problem or the solution
-    /// to a file in the given format.
-    /// Trying to write in an unsupported format will trigger
-    /// \ref UnsupportedFormatError.
-    /// \param file The file path
-    /// \param format The output file format.
-    /// Supportted formats are "MPS", "LP" and "SOL".
-    void write(std::string file, std::string format = "MPS") const {}
-#endif
-
   };
 
Index: lemon/cycle_canceling.h
===================================================================
--- lemon/cycle_canceling.h	(revision 1053)
+++ lemon/cycle_canceling.h	(revision 1070)
@@ -48,11 +48,11 @@
   /// \ref CycleCanceling implements three different cycle-canceling
   /// algorithms for finding a \ref min_cost_flow "minimum cost flow"
-  /// \cite amo93networkflows, \cite klein67primal,
-  /// \cite goldberg89cyclecanceling.
+  /// \ref amo93networkflows, \ref klein67primal,
+  /// \ref goldberg89cyclecanceling.
   /// The most efficent one is the \ref CANCEL_AND_TIGHTEN
   /// "Cancel-and-Tighten" algorithm, thus it is the default method.
-  /// It runs in strongly polynomial time O(n<sup>2</sup>e<sup>2</sup>log(n)),
-  /// but in practice, it is typically orders of magnitude slower than
-  /// the scaling algorithms and \ref NetworkSimplex.
+  /// It runs in strongly polynomial time, but in practice, it is typically
+  /// orders of magnitude slower than the scaling algorithms and
+  /// \ref NetworkSimplex.
   /// (For more information, see \ref min_cost_flow_algs "the module page".)
   ///
@@ -132,5 +132,5 @@
       /// The "Minimum Mean Cycle-Canceling" algorithm, which is a
       /// well-known strongly polynomial method
-      /// \cite goldberg89cyclecanceling. It improves along a
+      /// \ref goldberg89cyclecanceling. It improves along a
       /// \ref min_mean_cycle "minimum mean cycle" in each iteration.
       /// Its running time complexity is O(n<sup>2</sup>e<sup>3</sup>log(n)).
@@ -138,5 +138,5 @@
       /// The "Cancel-and-Tighten" algorithm, which can be viewed as an
       /// improved version of the previous method
-      /// \cite goldberg89cyclecanceling.
+      /// \ref goldberg89cyclecanceling.
       /// It is faster both in theory and in practice, its running time
       /// complexity is O(n<sup>2</sup>e<sup>2</sup>log(n)).
@@ -671,4 +671,8 @@
       if (_sum_supply > 0) return INFEASIBLE;
 
+      // Check lower and upper bounds
+      LEMON_DEBUG(checkBoundMaps(),
+          "Upper bounds must be greater or equal to the lower bounds");
+
 
       // Initialize vectors
@@ -779,4 +783,13 @@
 
       return OPTIMAL;
+    }
+    
+    // Check if the upper bound is greater or equal to the lower bound
+    // on each arc.
+    bool checkBoundMaps() {
+      for (int j = 0; j != _res_arc_num; ++j) {
+        if (_upper[j] < _lower[j]) return false;
+      }
+      return true;
     }
 
Index: mon/edmonds_karp.h
===================================================================
--- lemon/edmonds_karp.h	(revision 1061)
+++ 	(revision )
@@ -1,555 +1,0 @@
-/* -*- mode: C++; indent-tabs-mode: nil; -*-
- *
- * This file is a part of LEMON, a generic C++ optimization library.
- *
- * Copyright (C) 2003-2010
- * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
- * (Egervary Research Group on Combinatorial Optimization, EGRES).
- *
- * Permission to use, modify and distribute this software is granted
- * provided that this copyright notice appears in all copies. For
- * precise terms see the accompanying LICENSE file.
- *
- * This software is provided "AS IS" with no warranty of any kind,
- * express or implied, and with no claim as to its suitability for any
- * purpose.
- *
- */
-
-#ifndef LEMON_EDMONDS_KARP_H
-#define LEMON_EDMONDS_KARP_H
-
-/// \file
-/// \ingroup max_flow
-/// \brief Implementation of the Edmonds-Karp algorithm.
-
-#include <lemon/tolerance.h>
-#include <vector>
-
-namespace lemon {
-
-  /// \brief Default traits class of EdmondsKarp class.
-  ///
-  /// Default traits class of EdmondsKarp class.
-  /// \param GR Digraph type.
-  /// \param CAP Type of capacity map.
-  template <typename GR, typename CAP>
-  struct EdmondsKarpDefaultTraits {
-
-    /// \brief The digraph type the algorithm runs on. 
-    typedef GR Digraph;
-
-    /// \brief The type of the map that stores the arc capacities.
-    ///
-    /// The type of the map that stores the arc capacities.
-    /// It must meet the \ref concepts::ReadMap "ReadMap" concept.
-    typedef CAP CapacityMap;
-
-    /// \brief The type of the flow values.
-    typedef typename CapacityMap::Value Value;
-
-    /// \brief The type of the map that stores the flow values.
-    ///
-    /// The type of the map that stores the flow values.
-    /// It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
-#ifdef DOXYGEN
-    typedef GR::ArcMap<Value> FlowMap;
-#else
-    typedef typename Digraph::template ArcMap<Value> FlowMap;
-#endif
-
-    /// \brief Instantiates a FlowMap.
-    ///
-    /// This function instantiates a \ref FlowMap. 
-    /// \param digraph The digraph for which we would like to define
-    /// the flow map.
-    static FlowMap* createFlowMap(const Digraph& digraph) {
-      return new FlowMap(digraph);
-    }
-
-    /// \brief The tolerance used by the algorithm
-    ///
-    /// The tolerance used by the algorithm to handle inexact computation.
-    typedef lemon::Tolerance<Value> Tolerance;
-
-  };
-
-  /// \ingroup max_flow
-  ///
-  /// \brief Edmonds-Karp algorithms class.
-  ///
-  /// This class provides an implementation of the \e Edmonds-Karp \e
-  /// algorithm producing a \ref max_flow "flow of maximum value" in a
-  /// digraph \ref clrs01algorithms, \ref amo93networkflows,
-  /// \ref edmondskarp72theoretical.
-  /// The Edmonds-Karp algorithm is slower than the Preflow
-  /// algorithm, but it has an advantage of the step-by-step execution
-  /// control with feasible flow solutions. The \e source node, the \e
-  /// target node, the \e capacity of the arcs and the \e starting \e
-  /// flow value of the arcs should be passed to the algorithm
-  /// through the constructor.
-  ///
-  /// The time complexity of the algorithm is \f$ O(nm^2) \f$ in
-  /// worst case. Always try the Preflow algorithm instead of this if
-  /// you just want to compute the optimal flow.
-  ///
-  /// \tparam GR The type of the digraph the algorithm runs on.
-  /// \tparam CAP The type of the capacity map. The default map
-  /// type is \ref concepts::Digraph::ArcMap "GR::ArcMap<int>". 
-  /// \tparam TR The traits class that defines various types used by the
-  /// algorithm. By default, it is \ref EdmondsKarpDefaultTraits
-  /// "EdmondsKarpDefaultTraits<GR, CAP>".
-  /// In most cases, this parameter should not be set directly,
-  /// consider to use the named template parameters instead.
-
-#ifdef DOXYGEN
-  template <typename GR, typename CAP, typename TR>
-#else 
-  template <typename GR,
-	    typename CAP = typename GR::template ArcMap<int>,
-            typename TR = EdmondsKarpDefaultTraits<GR, CAP> >
-#endif
-  class EdmondsKarp {
-  public:
-
-    /// The \ref EdmondsKarpDefaultTraits "traits class" of the algorithm.
-    typedef TR Traits;
-    /// The type of the digraph the algorithm runs on.
-    typedef typename Traits::Digraph Digraph;
-    /// The type of the capacity map.
-    typedef typename Traits::CapacityMap CapacityMap;
-    /// The type of the flow values.
-    typedef typename Traits::Value Value; 
-
-    /// The type of the flow map.
-    typedef typename Traits::FlowMap FlowMap;
-    /// The type of the tolerance.
-    typedef typename Traits::Tolerance Tolerance;
-
-  private:
-
-    TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
-    typedef typename Digraph::template NodeMap<Arc> PredMap;
-    
-    const Digraph& _graph;
-    const CapacityMap* _capacity;
-
-    Node _source, _target;
-
-    FlowMap* _flow;
-    bool _local_flow;
-
-    PredMap* _pred;
-    std::vector<Node> _queue;
-    
-    Tolerance _tolerance;
-    Value _flow_value;
-
-    void createStructures() {
-      if (!_flow) {
-	_flow = Traits::createFlowMap(_graph);
-	_local_flow = true;
-      }
-      if (!_pred) {
-	_pred = new PredMap(_graph);
-      }
-      _queue.resize(countNodes(_graph));
-    }
-
-    void destroyStructures() {
-      if (_local_flow) {
-	delete _flow;
-      }
-      if (_pred) {
-	delete _pred;
-      }
-    }
-    
-  public:
-
-    typedef EdmondsKarp Create;
-
-    ///\name Named template parameters
-
-    ///@{
-
-    template <typename T>
-    struct SetFlowMapTraits : public Traits {
-      typedef T FlowMap;
-      static FlowMap *createFlowMap(const Digraph&) {
-	LEMON_ASSERT(false, "FlowMap is not initialized");
-        return 0;
-      }
-    };
-
-    /// \brief \ref named-templ-param "Named parameter" for setting
-    /// FlowMap type
-    ///
-    /// \ref named-templ-param "Named parameter" for setting FlowMap
-    /// type
-    template <typename T>
-    struct SetFlowMap 
-      : public EdmondsKarp<Digraph, CapacityMap, SetFlowMapTraits<T> > {
-      typedef EdmondsKarp<Digraph, CapacityMap, SetFlowMapTraits<T> > Create;
-    };
-
-    /// @}
-
-  protected:
-    
-    EdmondsKarp() {}
-
-  public:
-
-    /// \brief The constructor of the class.
-    ///
-    /// The constructor of the class. 
-    /// \param digraph The digraph the algorithm runs on. 
-    /// \param capacity The capacity of the arcs. 
-    /// \param source The source node.
-    /// \param target The target node.
-    EdmondsKarp(const Digraph& digraph, const CapacityMap& capacity,
-		Node source, Node target)
-      : _graph(digraph), _capacity(&capacity), _source(source), _target(target),
-	_flow(0), _local_flow(false), _pred(0), _tolerance(), _flow_value()
-    {
-      LEMON_ASSERT(_source != _target,
-                   "Flow source and target are the same nodes.");
-    }
-
-    /// \brief Destructor.
-    ///
-    /// Destructor.
-    ~EdmondsKarp() {
-      destroyStructures();
-    }
-
-    /// \brief Sets the capacity map.
-    ///
-    /// Sets the capacity map.
-    /// \return <tt>(*this)</tt>
-    EdmondsKarp& capacityMap(const CapacityMap& map) {
-      _capacity = &map;
-      return *this;
-    }
-
-    /// \brief Sets the flow map.
-    ///
-    /// Sets the flow map.
-    /// If you don't use this function before calling \ref run() or
-    /// \ref init(), an instance will be allocated automatically.
-    /// The destructor deallocates this automatically allocated map,
-    /// of course.
-    /// \return <tt>(*this)</tt>
-    EdmondsKarp& flowMap(FlowMap& map) {
-      if (_local_flow) {
-	delete _flow;
-	_local_flow = false;
-      }
-      _flow = &map;
-      return *this;
-    }
-
-    /// \brief Sets the source node.
-    ///
-    /// Sets the source node.
-    /// \return <tt>(*this)</tt>
-    EdmondsKarp& source(const Node& node) {
-      _source = node;
-      return *this;
-    }
-
-    /// \brief Sets the target node.
-    ///
-    /// Sets the target node.
-    /// \return <tt>(*this)</tt>
-    EdmondsKarp& target(const Node& node) {
-      _target = node;
-      return *this;
-    }
-
-    /// \brief Sets the tolerance used by algorithm.
-    ///
-    /// Sets the tolerance used by algorithm.
-    /// \return <tt>(*this)</tt>
-    EdmondsKarp& tolerance(const Tolerance& tolerance) {
-      _tolerance = tolerance;
-      return *this;
-    } 
-
-    /// \brief Returns a const reference to the tolerance.
-    ///
-    /// Returns a const reference to the tolerance object used by
-    /// the algorithm.
-    const Tolerance& tolerance() const {
-      return _tolerance;
-    } 
-
-    /// \name Execution control
-    /// The simplest way to execute the algorithm is to use \ref run().\n
-    /// If you need better control on the initial solution or the execution,
-    /// you have to call one of the \ref init() functions first, then
-    /// \ref start() or multiple times the \ref augment() function.
-    
-    ///@{
-
-    /// \brief Initializes the algorithm.
-    ///
-    /// Initializes the internal data structures and sets the initial
-    /// flow to zero on each arc.
-    void init() {
-      createStructures();
-      for (ArcIt it(_graph); it != INVALID; ++it) {
-        _flow->set(it, 0);
-      }
-      _flow_value = 0;
-    }
-    
-    /// \brief Initializes the algorithm using the given flow map.
-    ///
-    /// Initializes the internal data structures and sets the initial
-    /// flow to the given \c flowMap. The \c flowMap should
-    /// contain a feasible flow, i.e. at each node excluding the source
-    /// and the target, the incoming flow should be equal to the
-    /// outgoing flow.
-    template <typename FlowMap>
-    void init(const FlowMap& flowMap) {
-      createStructures();
-      for (ArcIt e(_graph); e != INVALID; ++e) {
-	_flow->set(e, flowMap[e]);
-      }
-      _flow_value = 0;
-      for (OutArcIt jt(_graph, _source); jt != INVALID; ++jt) {
-        _flow_value += (*_flow)[jt];
-      }
-      for (InArcIt jt(_graph, _source); jt != INVALID; ++jt) {
-        _flow_value -= (*_flow)[jt];
-      }
-    }
-
-    /// \brief Initializes the algorithm using the given flow map.
-    ///
-    /// Initializes the internal data structures and sets the initial
-    /// flow to the given \c flowMap. The \c flowMap should
-    /// contain a feasible flow, i.e. at each node excluding the source
-    /// and the target, the incoming flow should be equal to the
-    /// outgoing flow. 
-    /// \return \c false when the given \c flowMap does not contain a
-    /// feasible flow.
-    template <typename FlowMap>
-    bool checkedInit(const FlowMap& flowMap) {
-      createStructures();
-      for (ArcIt e(_graph); e != INVALID; ++e) {
-	_flow->set(e, flowMap[e]);
-      }
-      for (NodeIt it(_graph); it != INVALID; ++it) {
-        if (it == _source || it == _target) continue;
-        Value outFlow = 0;
-        for (OutArcIt jt(_graph, it); jt != INVALID; ++jt) {
-          outFlow += (*_flow)[jt];
-        }
-        Value inFlow = 0;
-        for (InArcIt jt(_graph, it); jt != INVALID; ++jt) {
-          inFlow += (*_flow)[jt];
-        }
-        if (_tolerance.different(outFlow, inFlow)) {
-          return false;
-        }
-      }
-      for (ArcIt it(_graph); it != INVALID; ++it) {
-        if (_tolerance.less((*_flow)[it], 0)) return false;
-        if (_tolerance.less((*_capacity)[it], (*_flow)[it])) return false;
-      }
-      _flow_value = 0;
-      for (OutArcIt jt(_graph, _source); jt != INVALID; ++jt) {
-        _flow_value += (*_flow)[jt];
-      }
-      for (InArcIt jt(_graph, _source); jt != INVALID; ++jt) {
-        _flow_value -= (*_flow)[jt];
-      }
-      return true;
-    }
-
-    /// \brief Augments the solution along a shortest path.
-    /// 
-    /// Augments the solution along a shortest path. This function searches a
-    /// shortest path between the source and the target
-    /// in the residual digraph by the Bfs algoritm.
-    /// Then it increases the flow on this path with the minimal residual
-    /// capacity on the path. If there is no such path, it gives back
-    /// false.
-    /// \return \c false when the augmenting did not success, i.e. the
-    /// current flow is a feasible and optimal solution.
-    bool augment() {
-      for (NodeIt n(_graph); n != INVALID; ++n) {
-	_pred->set(n, INVALID);
-      }
-      
-      int first = 0, last = 1;
-      
-      _queue[0] = _source;
-      _pred->set(_source, OutArcIt(_graph, _source));
-
-      while (first != last && (*_pred)[_target] == INVALID) {
-	Node n = _queue[first++];
-	
-	for (OutArcIt e(_graph, n); e != INVALID; ++e) {
-	  Value rem = (*_capacity)[e] - (*_flow)[e];
-	  Node t = _graph.target(e);
-	  if (_tolerance.positive(rem) && (*_pred)[t] == INVALID) {
-	    _pred->set(t, e);
-	    _queue[last++] = t;
-	  }
-	}
-	for (InArcIt e(_graph, n); e != INVALID; ++e) {
-	  Value rem = (*_flow)[e];
-	  Node t = _graph.source(e);
-	  if (_tolerance.positive(rem) && (*_pred)[t] == INVALID) {
-	    _pred->set(t, e);
-	    _queue[last++] = t;
-	  }
-	}
-      }
-
-      if ((*_pred)[_target] != INVALID) {
-	Node n = _target;
-	Arc e = (*_pred)[n];
-
-	Value prem = (*_capacity)[e] - (*_flow)[e];
-	n = _graph.source(e);
-	while (n != _source) {
-	  e = (*_pred)[n];
-	  if (_graph.target(e) == n) {
-	    Value rem = (*_capacity)[e] - (*_flow)[e];
-	    if (rem < prem) prem = rem;
-	    n = _graph.source(e);
-	  } else {
-	    Value rem = (*_flow)[e];
-	    if (rem < prem) prem = rem;
-	    n = _graph.target(e);   
-	  } 
-	}
-
-	n = _target;
-	e = (*_pred)[n];
-
-	_flow->set(e, (*_flow)[e] + prem);
-	n = _graph.source(e);
-	while (n != _source) {
-	  e = (*_pred)[n];
-	  if (_graph.target(e) == n) {
-	    _flow->set(e, (*_flow)[e] + prem);
-	    n = _graph.source(e);
-	  } else {
-	    _flow->set(e, (*_flow)[e] - prem);
-	    n = _graph.target(e);   
-	  } 
-	}
-
-	_flow_value += prem;	
-	return true;
-      } else {
-	return false;
-      }
-    }
-
-    /// \brief Executes the algorithm
-    ///
-    /// Executes the algorithm by performing augmenting phases until the
-    /// optimal solution is reached. 
-    /// \pre One of the \ref init() functions must be called before
-    /// using this function.
-    void start() {
-      while (augment()) {}
-    }
-
-    /// \brief Runs the algorithm.
-    /// 
-    /// Runs the Edmonds-Karp algorithm.
-    /// \note ek.run() is just a shortcut of the following code.
-    ///\code 
-    /// ek.init();
-    /// ek.start();
-    ///\endcode
-    void run() {
-      init();
-      start();
-    }
-
-    /// @}
-
-    /// \name Query Functions
-    /// The result of the Edmonds-Karp algorithm can be obtained using these
-    /// functions.\n
-    /// Either \ref run() or \ref start() should be called before using them.
-    
-    ///@{
-
-    /// \brief Returns the value of the maximum flow.
-    ///
-    /// Returns the value of the maximum flow found by the algorithm.
-    ///
-    /// \pre Either \ref run() or \ref init() must be called before
-    /// using this function.
-    Value flowValue() const {
-      return _flow_value;
-    }
-
-    /// \brief Returns the flow value on the given arc.
-    ///
-    /// Returns the flow value on the given arc.
-    ///
-    /// \pre Either \ref run() or \ref init() must be called before
-    /// using this function.
-    Value flow(const Arc& arc) const {
-      return (*_flow)[arc];
-    }
-
-    /// \brief Returns a const reference to the flow map.
-    ///
-    /// Returns a const reference to the arc map storing the found flow.
-    ///
-    /// \pre Either \ref run() or \ref init() must be called before
-    /// using this function.
-    const FlowMap& flowMap() const {
-      return *_flow;
-    }
-
-    /// \brief Returns \c true when the node is on the source side of the
-    /// minimum cut.
-    ///
-    /// Returns true when the node is on the source side of the found
-    /// minimum cut.
-    ///
-    /// \pre Either \ref run() or \ref init() must be called before
-    /// using this function.
-    bool minCut(const Node& node) const {
-      return ((*_pred)[node] != INVALID) || node == _source;
-    }
-
-    /// \brief Gives back a minimum value cut.
-    ///
-    /// Sets \c cutMap to the characteristic vector of a minimum value
-    /// cut. \c cutMap should be a \ref concepts::WriteMap "writable"
-    /// node map with \c bool (or convertible) value type.
-    ///
-    /// \note This function calls \ref minCut() for each node, so it runs in
-    /// O(n) time.
-    ///
-    /// \pre Either \ref run() or \ref init() must be called before
-    /// using this function.
-    template <typename CutMap>
-    void minCutMap(CutMap& cutMap) const {
-      for (NodeIt n(_graph); n != INVALID; ++n) {
-	cutMap.set(n, (*_pred)[n] != INVALID);
-      }
-      cutMap.set(_source, true);
-    }    
-
-    /// @}
-
-  };
-
-}
-
-#endif
Index: lemon/glpk.cc
===================================================================
--- lemon/glpk.cc	(revision 1063)
+++ lemon/glpk.cc	(revision 989)
@@ -581,13 +581,4 @@
       break;
     }
-  }
-
-  void GlpkBase::_write(std::string file, std::string format) const
-  {
-    if(format == "MPS")
-      glp_write_mps(lp, GLP_MPS_FILE, 0, file.c_str());
-    else if(format == "LP")
-      glp_write_lp(lp, 0, file.c_str());
-    else throw UnsupportedFormatError(format);
   }
 
@@ -1008,5 +999,3 @@
   const char* GlpkMip::_solverName() const { return "GlpkMip"; }
 
-
-
 } //END OF NAMESPACE LEMON
Index: lemon/glpk.h
===================================================================
--- lemon/glpk.h	(revision 1063)
+++ lemon/glpk.h	(revision 877)
@@ -116,6 +116,4 @@
     virtual void _messageLevel(MessageLevel level);
 
-    virtual void _write(std::string file, std::string format) const;
-
   private:
 
@@ -147,17 +145,4 @@
     int lpxCol(Col c) const { return cols(id(c)); }
 
-#ifdef DOXYGEN
-    /// Write the problem or the solution to a file in the given format
-    
-    /// This function writes the problem or the solution
-    /// to a file in the given format.
-    /// Trying to write in an unsupported format will trigger
-    /// \ref UnsupportedFormatError.
-    /// \param file The file path
-    /// \param format The output file format.
-    /// Supportted formats are "MPS" and "LP".
-    void write(std::string file, std::string format = "MPS") const {}
-#endif
-
   };
 
Index: lemon/grosso_locatelli_pullan_mc.h
===================================================================
--- lemon/grosso_locatelli_pullan_mc.h	(revision 1053)
+++ lemon/grosso_locatelli_pullan_mc.h	(revision 918)
@@ -41,5 +41,5 @@
   /// \ref GrossoLocatelliPullanMc implements the iterated local search
   /// algorithm of Grosso, Locatelli, and Pullan for solving the \e maximum
-  /// \e clique \e problem \cite grosso08maxclique.
+  /// \e clique \e problem \ref grosso08maxclique.
   /// It is to find the largest complete subgraph (\e clique) in an
   /// undirected graph, i.e., the largest set of nodes where each
Index: lemon/hartmann_orlin_mmc.h
===================================================================
--- lemon/hartmann_orlin_mmc.h	(revision 1053)
+++ lemon/hartmann_orlin_mmc.h	(revision 1002)
@@ -99,9 +99,8 @@
   /// This class implements the Hartmann-Orlin algorithm for finding
   /// a directed cycle of minimum mean cost in a digraph
-  /// \cite hartmann93finding, \cite dasdan98minmeancycle.
-  /// This method is based on \ref KarpMmc "Karp"'s original algorithm, but
-  /// applies an early termination scheme. It makes the algorithm
-  /// significantly faster for some problem instances, but slower for others.
-  /// The algorithm runs in time O(ne) and uses space O(n<sup>2</sup>+e).
+  /// \ref hartmann93finding, \ref dasdan98minmeancycle.
+  /// It is an improved version of \ref KarpMmc "Karp"'s original algorithm,
+  /// it applies an efficient early termination scheme.
+  /// It runs in time O(ne) and uses space O(n<sup>2</sup>+e).
   ///
   /// \tparam GR The type of the digraph the algorithm runs on.
@@ -276,6 +275,6 @@
     ///
     /// If you don't call this function before calling \ref run() or
-    /// \ref findCycleMean(), a local \ref Path "path" structure
-    /// will be allocated. The destuctor deallocates this automatically
+    /// \ref findCycleMean(), it will allocate a local \ref Path "path"
+    /// structure. The destuctor deallocates this automatically
     /// allocated object, of course.
     ///
Index: lemon/howard_mmc.h
===================================================================
--- lemon/howard_mmc.h	(revision 1053)
+++ lemon/howard_mmc.h	(revision 1012)
@@ -99,5 +99,5 @@
   /// This class implements Howard's policy iteration algorithm for finding
   /// a directed cycle of minimum mean cost in a digraph
-  /// \cite dasdan98minmeancycle, \cite dasdan04experimental.
+  /// \ref dasdan98minmeancycle, \ref dasdan04experimental.
   /// This class provides the most efficient algorithm for the
   /// minimum mean cycle problem, though the best known theoretical
@@ -283,6 +283,6 @@
     ///
     /// If you don't call this function before calling \ref run() or
-    /// \ref findCycleMean(), a local \ref Path "path" structure
-    /// will be allocated. The destuctor deallocates this automatically
+    /// \ref findCycleMean(), it will allocate a local \ref Path "path"
+    /// structure. The destuctor deallocates this automatically
     /// allocated object, of course.
     ///
Index: lemon/karp_mmc.h
===================================================================
--- lemon/karp_mmc.h	(revision 1053)
+++ lemon/karp_mmc.h	(revision 1002)
@@ -99,5 +99,5 @@
   /// This class implements Karp's algorithm for finding a directed
   /// cycle of minimum mean cost in a digraph
-  /// \cite karp78characterization, \cite dasdan98minmeancycle.
+  /// \ref karp78characterization, \ref dasdan98minmeancycle.
   /// It runs in time O(ne) and uses space O(n<sup>2</sup>+e).
   ///
@@ -271,6 +271,6 @@
     ///
     /// If you don't call this function before calling \ref run() or
-    /// \ref findCycleMean(), a local \ref Path "path" structure
-    /// will be allocated. The destuctor deallocates this automatically
+    /// \ref findCycleMean(), it will allocate a local \ref Path "path"
+    /// structure. The destuctor deallocates this automatically
     /// allocated object, of course.
     ///
Index: lemon/list_graph.h
===================================================================
--- lemon/list_graph.h	(revision 1049)
+++ lemon/list_graph.h	(revision 1025)
@@ -446,5 +446,5 @@
     ///or changeTarget(), thus \c ArcIt and \c OutArcIt iterators are
     ///invalidated for the outgoing arcs of node \c v and \c InArcIt
-    ///iterators are invalidated for the incoming arcs of \c v.
+    ///iterators are invalidated for the incomming arcs of \c v.
     ///Moreover all iterators referencing node \c v or the removed
     ///loops are also invalidated. Other iterators remain valid.
Index: lemon/lp.h
===================================================================
--- lemon/lp.h	(revision 1064)
+++ lemon/lp.h	(revision 877)
@@ -60,5 +60,5 @@
   ///\ingroup lp_group
   ///
-  ///Currently, the possible values are \c GLPK, \c CPLEX or \c CBC
+  ///Currently, the possible values are \c GLPK or \c CPLEX
 #define LEMON_DEFAULT_MIP SOLVER
   ///The default MIP solver.
@@ -67,22 +67,23 @@
   ///\ingroup lp_group
   ///
-  ///Currently, it is either \c GlpkMip, \c CplexMip , \c CbcMip
+  ///Currently, it is either \c GlpkMip or \c CplexMip
   typedef GlpkMip Mip;
 #else
-#if LEMON_DEFAULT_LP == GLPK
+#ifdef LEMON_HAVE_GLPK
+# define LEMON_DEFAULT_LP GLPK
   typedef GlpkLp Lp;
-#elif LEMON_DEFAULT_LP == CPLEX
+# define LEMON_DEFAULT_MIP GLPK
+  typedef GlpkMip Mip;
+#elif LEMON_HAVE_CPLEX
+# define LEMON_DEFAULT_LP CPLEX
   typedef CplexLp Lp;
-#elif LEMON_DEFAULT_LP == SOPLEX
+# define LEMON_DEFAULT_MIP CPLEX
+  typedef CplexMip Mip;
+#elif LEMON_HAVE_SOPLEX
+# define DEFAULT_LP SOPLEX
   typedef SoplexLp Lp;
-#elif LEMON_DEFAULT_LP == CLP
+#elif LEMON_HAVE_CLP
+# define DEFAULT_LP CLP
   typedef ClpLp Lp;
-#endif
-#if LEMON_DEFAULT_MIP == GLPK
-  typedef GlpkLp Mip;
-#elif LEMON_DEFAULT_MIP == CPLEX
-  typedef CplexMip Mip;
-#elif LEMON_DEFAULT_MIP == CBC
-  typedef CbcMip Mip;
 #endif
 #endif
Index: lemon/lp_base.h
===================================================================
--- lemon/lp_base.h	(revision 1063)
+++ lemon/lp_base.h	(revision 989)
@@ -1008,34 +1008,4 @@
   public:
 
-    ///\e
-    class UnsupportedFormatError : public Exception
-    {
-      std::string _format;
-      mutable std::string _what;
-    public:
-      explicit UnsupportedFormatError(std::string format) throw()
-        : _format(format) { }
-      virtual ~UnsupportedFormatError() throw() {}
-      virtual const char* what() const throw() {
-        try {
-          _what.clear();
-          std::ostringstream oss;
-          oss << "lemon::UnsupportedFormatError: " << _format;
-          _what = oss.str();
-        }
-        catch (...) {}
-        if (!_what.empty()) return _what.c_str();
-        else return "lemon::UnsupportedFormatError";
-      }
-    };
-    
-  protected:
-    virtual void _write(std::string, std::string format) const
-    {
-      throw UnsupportedFormatError(format);
-    }
-    
-  public:
-
     /// Virtual destructor
     virtual ~LpBase() {}
@@ -1586,24 +1556,9 @@
     void min() { _setSense(MIN); }
 
-    ///Clear the problem
+    ///Clears the problem
     void clear() { _clear(); rows.clear(); cols.clear(); }
 
-    /// Set the message level of the solver
+    /// Sets the message level of the solver
     void messageLevel(MessageLevel level) { _messageLevel(level); }
-
-    /// Write the problem to a file in the given format
-
-    /// This function writes the problem to a file in the given format.
-    /// Different solver backends may support different formats.
-    /// Trying to write in an unsupported format will trigger
-    /// \ref UnsupportedFormatError. For the supported formats,
-    /// visit the documentation of the base class of the related backends
-    /// (\ref CplexBase, \ref GlpkBase etc.)
-    /// \param file The file path
-    /// \param format The output file format.
-    void write(std::string file, std::string format = "MPS") const
-    {
-      _write(file.c_str(),format.c_str());
-    }
 
     ///@}
Index: lemon/lp_skeleton.cc
===================================================================
--- lemon/lp_skeleton.cc	(revision 1063)
+++ lemon/lp_skeleton.cc	(revision 877)
@@ -92,6 +92,4 @@
   void SkeletonSolverBase::_messageLevel(MessageLevel) {}
 
-  void SkeletonSolverBase::_write(std::string, std::string) const {}
-
   LpSkeleton::SolveExitStatus LpSkeleton::_solve() { return SOLVED; }
 
Index: lemon/lp_skeleton.h
===================================================================
--- lemon/lp_skeleton.h	(revision 1063)
+++ lemon/lp_skeleton.h	(revision 877)
@@ -145,8 +145,4 @@
     ///\e
     virtual void _messageLevel(MessageLevel);
-
-    ///\e
-    virtual void _write(std::string file, std::string format) const;
-
   };
 
@@ -227,5 +223,4 @@
     ///\e
     virtual const char* _solverName() const;
-
   };
 
Index: lemon/math.h
===================================================================
--- lemon/math.h	(revision 1054)
+++ lemon/math.h	(revision 877)
@@ -66,12 +66,7 @@
     }
 
-  ///Round a value to its closest integer
-  inline double round(double r) {
-    return (r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5);
-  }
-
   /// @}
 
 } //namespace lemon
 
-#endif //LEMON_MATH_H
+#endif //LEMON_TOLERANCE_H
Index: lemon/network_simplex.h
===================================================================
--- lemon/network_simplex.h	(revision 1053)
+++ lemon/network_simplex.h	(revision 1070)
@@ -42,6 +42,6 @@
   /// \ref NetworkSimplex implements the primal Network Simplex algorithm
   /// for finding a \ref min_cost_flow "minimum cost flow"
-  /// \cite amo93networkflows, \cite dantzig63linearprog,
-  /// \cite kellyoneill91netsimplex.
+  /// \ref amo93networkflows, \ref dantzig63linearprog,
+  /// \ref kellyoneill91netsimplex.
   /// This algorithm is a highly efficient specialized version of the
   /// linear programming simplex method directly for the minimum cost
@@ -1067,4 +1067,8 @@
       if ( !((_stype == GEQ && _sum_supply <= 0) ||
              (_stype == LEQ && _sum_supply >= 0)) ) return false;
+
+      // Check lower and upper bounds
+      LEMON_DEBUG(checkBoundMaps(),
+          "Upper bounds must be greater or equal to the lower bounds");
 
       // Remove non-zero lower bounds
@@ -1231,4 +1235,13 @@
       return true;
     }
+    
+    // Check if the upper bound is greater or equal to the lower bound
+    // on each arc.
+    bool checkBoundMaps() {
+      for (int j = 0; j != _arc_num; ++j) {
+        if (_upper[j] < _lower[j]) return false;
+      }
+      return true;
+    }
 
     // Find the join node
@@ -1504,5 +1517,5 @@
           }
         } else {
-          // Find the min. cost incoming arc for each demand node
+          // Find the min. cost incomming arc for each demand node
           for (int i = 0; i != int(demand_nodes.size()); ++i) {
             Node v = demand_nodes[i];
Index: lemon/path.h
===================================================================
--- lemon/path.h	(revision 1044)
+++ lemon/path.h	(revision 1000)
@@ -318,5 +318,5 @@
       /// Constructor with starting point
       ArcIt(const SimplePath &_path, int _idx)
-        : path(&_path), idx(_idx) {}
+        : idx(_idx), path(&_path) {}
 
     public:
Index: lemon/preflow.h
===================================================================
--- lemon/preflow.h	(revision 1053)
+++ lemon/preflow.h	(revision 966)
@@ -103,6 +103,6 @@
   /// This class provides an implementation of Goldberg-Tarjan's \e preflow
   /// \e push-relabel algorithm producing a \ref max_flow
-  /// "flow of maximum value" in a digraph \cite clrs01algorithms,
-  /// \cite amo93networkflows, \cite goldberg88newapproach.
+  /// "flow of maximum value" in a digraph \ref clrs01algorithms,
+  /// \ref amo93networkflows, \ref goldberg88newapproach.
   /// The preflow algorithms are the fastest known maximum
   /// flow algorithms. The current implementation uses a mixture of the
Index: lemon/time_measure.h
===================================================================
--- lemon/time_measure.h	(revision 1054)
+++ lemon/time_measure.h	(revision 786)
@@ -35,5 +35,4 @@
 #include <fstream>
 #include <iostream>
-#include <lemon/math.h>
 
 namespace lemon {
@@ -65,19 +64,4 @@
     double rtime;
 
-  public:
-    ///Display format specifier
-
-    ///\e
-    ///
-    enum Format {
-      /// Reports all measured values
-      NORMAL = 0,
-      /// Only real time and an error indicator is displayed
-      SHORT = 1
-    };
-
-  private:
-    static Format _format;
-
     void _reset() {
       utime = stime = cutime = cstime = rtime = 0;
@@ -86,18 +70,4 @@
   public:
 
-    ///Set output format
-
-    ///Set output format.
-    ///
-    ///The output format is global for all timestamp instances.
-    static void format(Format f) { _format = f; }
-    ///Retrieve the current output format
-
-    ///Retrieve the current output format
-    ///
-    ///The output format is global for all timestamp instances.
-    static Format format() { return _format; }
-
-    
     ///Read the current time values of the process
     void stamp()
@@ -255,22 +225,9 @@
   inline std::ostream& operator<<(std::ostream& os,const TimeStamp &t)
   {
-    switch(t._format)
-      {
-      case TimeStamp::NORMAL:
-        os << "u: " << t.userTime() <<
-          "s, s: " << t.systemTime() <<
-          "s, cu: " << t.cUserTime() <<
-          "s, cs: " << t.cSystemTime() <<
-          "s, real: " << t.realTime() << "s";
-        break;
-      case TimeStamp::SHORT:
-        double total = t.userTime()+t.systemTime()+
-          t.cUserTime()+t.cSystemTime();
-        os << t.realTime()
-           << "s (err: " << round((t.realTime()-total)/
-                                  t.realTime()*10000)/100
-           << "%)";
-        break;
-      }
+    os << "u: " << t.userTime() <<
+      "s, s: " << t.systemTime() <<
+      "s, cu: " << t.cUserTime() <<
+      "s, cs: " << t.cSystemTime() <<
+      "s, real: " << t.realTime() << "s";
     return os;
   }
@@ -512,5 +469,4 @@
     std::string _title;
     std::ostream &_os;
-    bool _active;
   public:
     ///Constructor
@@ -520,25 +476,11 @@
     ///\param os The stream to print the report to.
     ///\param run Sets whether the timer should start immediately.
-    ///\param active Sets whether the report should actually be printed
-    ///       on destruction.
-    TimeReport(std::string title,std::ostream &os=std::cerr,bool run=true,
-	       bool active=true)
-      : Timer(run), _title(title), _os(os), _active(active) {}
+    TimeReport(std::string title,std::ostream &os=std::cerr,bool run=true)
+      : Timer(run), _title(title), _os(os){}
     ///Destructor that prints the ellapsed time
     ~TimeReport()
     {
-      if(_active) _os << _title << *this << std::endl;
-    }
-    
-    ///Retrieve the activity status
-
-    ///\e
-    ///
-    bool active() const { return _active; }
-    ///Set the activity status
-
-    /// This function set whether the time report should actually be printed
-    /// on destruction.
-    void active(bool a) { _active=a; }
+      _os << _title << *this << std::endl;
+    }
   };
 
Index: scripts/bib2dox.py
===================================================================
--- scripts/bib2dox.py	(revision 836)
+++ scripts/bib2dox.py	(revision 836)
@@ -0,0 +1,816 @@
+#! /usr/bin/env python
+"""
+  BibTeX to Doxygen converter
+  Usage: python bib2dox.py bibfile.bib > bibfile.dox
+
+  This file is a part of LEMON, a generic C++ optimization library.
+
+  **********************************************************************
+
+  This code is the modification of the BibTeX to XML converter
+  by Vidar Bronken Gundersen et al.
+  See the original copyright notices below. 
+
+  **********************************************************************
+
+  Decoder for bibliographic data, BibTeX
+  Usage: python bibtex2xml.py bibfile.bib > bibfile.xml
+
+  v.8
+  (c)2002-06-23 Vidar Bronken Gundersen
+  http://bibtexml.sf.net/
+  Reuse approved as long as this notification is kept.
+  Licence: GPL.
+
+  Contributions/thanks to:
+  Egon Willighagen, http://sf.net/projects/jreferences/
+  Richard Mahoney (for providing a test case)
+
+  Editted by Sara Sprenkle to be more robust and handle more bibtex features.
+  (c) 2003-01-15
+
+  1.  Changed bibtex: tags to bibxml: tags.
+  2.  Use xmlns:bibxml="http://bibtexml.sf.net/"
+  3.  Allow spaces between @type and first {
+  4.  "author" fields with multiple authors split by " and "
+      are put in separate xml "bibxml:author" tags.
+  5.  Option for Titles: words are capitalized
+      only if first letter in title or capitalized inside braces
+  6.  Removes braces from within field values
+  7.  Ignores comments in bibtex file (including @comment{ or % )
+  8.  Replaces some special latex tags, e.g., replaces ~ with '&#160;'
+  9.  Handles bibtex @string abbreviations
+        --> includes bibtex's default abbreviations for months
+        --> does concatenation of abbr # " more " and " more " # abbr
+  10. Handles @type( ... ) or @type{ ... }
+  11. The keywords field is split on , or ; and put into separate xml
+      "bibxml:keywords" tags
+  12. Ignores @preamble
+
+  Known Limitations
+  1.  Does not transform Latex encoding like math mode and special
+      latex symbols.
+  2.  Does not parse author fields into first and last names.
+      E.g., It does not do anything special to an author whose name is
+      in the form LAST_NAME, FIRST_NAME
+      In "author" tag, will show up as
+      <bibxml:author>LAST_NAME, FIRST_NAME</bibxml:author>
+  3.  Does not handle "crossref" fields other than to print
+      <bibxml:crossref>...</bibxml:crossref>
+  4.  Does not inform user of the input's format errors.  You just won't
+      be able to transform the file later with XSL
+
+  You will have to manually edit the XML output if you need to handle
+  these (and unknown) limitations.
+
+"""
+
+import string, re
+
+# set of valid name characters
+valid_name_chars = '[\w\-:]'
+
+#
+# define global regular expression variables
+#
+author_rex = re.compile('\s+and\s+')
+rembraces_rex = re.compile('[{}]')
+capitalize_rex = re.compile('({[^}]*})')
+
+# used by bibtexkeywords(data)
+keywords_rex = re.compile('[,;]')
+
+# used by concat_line(line)
+concatsplit_rex = re.compile('\s*#\s*')
+
+# split on {, }, or " in verify_out_of_braces
+delimiter_rex = re.compile('([{}"])',re.I)
+
+field_rex = re.compile('\s*(\w*)\s*=\s*(.*)')
+data_rex = re.compile('\s*(\w*)\s*=\s*([^,]*),?')
+
+url_rex = re.compile('\\\url\{([^}]*)\}')
+
+#
+# styles for html formatting
+#
+divstyle = 'margin-top: -4ex; margin-left: 8em;'
+
+#
+# return the string parameter without braces
+#
+def transformurls(str):
+    return url_rex.sub(r'<a href="\1">\1</a>', str)
+
+#
+# return the string parameter without braces
+#
+def removebraces(str):
+    return rembraces_rex.sub('', str)
+
+#
+# latex-specific replacements
+# (do this after braces were removed)
+#
+def latexreplacements(line):
+    line = string.replace(line, '~', '&nbsp;')
+    line = string.replace(line, '\\\'a', '&aacute;')
+    line = string.replace(line, '\\"a', '&auml;')
+    line = string.replace(line, '\\\'e', '&eacute;')
+    line = string.replace(line, '\\"e', '&euml;')
+    line = string.replace(line, '\\\'i', '&iacute;')
+    line = string.replace(line, '\\"i', '&iuml;')
+    line = string.replace(line, '\\\'o', '&oacute;')
+    line = string.replace(line, '\\"o', '&ouml;')
+    line = string.replace(line, '\\\'u', '&uacute;')
+    line = string.replace(line, '\\"u', '&uuml;')
+    line = string.replace(line, '\\H o', '&otilde;')
+    line = string.replace(line, '\\H u', '&uuml;')   # &utilde; does not exist
+    line = string.replace(line, '\\\'A', '&Aacute;')
+    line = string.replace(line, '\\"A', '&Auml;')
+    line = string.replace(line, '\\\'E', '&Eacute;')
+    line = string.replace(line, '\\"E', '&Euml;')
+    line = string.replace(line, '\\\'I', '&Iacute;')
+    line = string.replace(line, '\\"I', '&Iuml;')
+    line = string.replace(line, '\\\'O', '&Oacute;')
+    line = string.replace(line, '\\"O', '&Ouml;')
+    line = string.replace(line, '\\\'U', '&Uacute;')
+    line = string.replace(line, '\\"U', '&Uuml;')
+    line = string.replace(line, '\\H O', '&Otilde;')
+    line = string.replace(line, '\\H U', '&Uuml;')   # &Utilde; does not exist
+
+    return line
+
+#
+# copy characters form a string decoding html expressions (&xyz;)
+#
+def copychars(str, ifrom, count):
+    result = ''
+    i = ifrom
+    c = 0
+    html_spec = False
+    while (i < len(str)) and (c < count):
+        if str[i] == '&':
+            html_spec = True;
+            if i+1 < len(str):
+                result += str[i+1]
+            c += 1
+            i += 2
+        else:
+            if not html_spec:
+                if ((str[i] >= 'A') and (str[i] <= 'Z')) or \
+                   ((str[i] >= 'a') and (str[i] <= 'z')):
+                    result += str[i]
+                    c += 1
+            elif str[i] == ';':
+                html_spec = False;
+            i += 1
+    
+    return result
+
+
+# 
+# Handle a list of authors (separated by 'and').
+# It gives back an array of the follwing values:
+#  - num: the number of authors,
+#  - list: the list of the author names,
+#  - text: the bibtex text (separated by commas and/or 'and')
+#  - abbrev: abbreviation that can be used for indicate the
+#    bibliography entries
+#
+def bibtexauthor(data):
+    result = {}
+    bibtex = ''
+    result['list'] = author_rex.split(data)
+    result['num'] = len(result['list'])
+    for i, author in enumerate(result['list']):
+        # general transformations
+        author = latexreplacements(removebraces(author.strip()))
+        # transform "Xyz, A. B." to "A. B. Xyz"
+        pos = author.find(',')
+        if pos != -1:
+            author = author[pos+1:].strip() + ' ' + author[:pos].strip()
+        result['list'][i] = author
+        bibtex += author + '#'
+    bibtex = bibtex[:-1]
+    if result['num'] > 1:
+        ix = bibtex.rfind('#')
+        if result['num'] == 2:
+            bibtex = bibtex[:ix] + ' and ' + bibtex[ix+1:]
+        else:
+            bibtex = bibtex[:ix] + ', and ' + bibtex[ix+1:]
+    bibtex = bibtex.replace('#', ', ')
+    result['text'] = bibtex
+    
+    result['abbrev'] = ''
+    for author in result['list']:
+        pos = author.rfind(' ') + 1
+        count = 1
+        if result['num'] == 1:
+            count = 3
+        result['abbrev'] += copychars(author, pos, count)
+
+    return result
+
+
+#
+# data = title string
+# @return the capitalized title (first letter is capitalized), rest are capitalized
+# only if capitalized inside braces
+#
+def capitalizetitle(data):
+    title_list = capitalize_rex.split(data)
+    title = ''
+    count = 0
+    for phrase in title_list:
+         check = string.lstrip(phrase)
+
+         # keep phrase's capitalization the same
+         if check.find('{') == 0:
+              title += removebraces(phrase)
+         else:
+         # first word --> capitalize first letter (after spaces)
+              if count == 0:
+                  title += check.capitalize()
+              else:
+                  title += phrase.lower()
+         count = count + 1
+
+    return title
+
+
+#
+# @return the bibtex for the title
+# @param data --> title string
+# braces are removed from title
+#
+def bibtextitle(data, entrytype):
+    if entrytype in ('book', 'inbook'):
+        title = removebraces(data.strip())
+    else:
+        title = removebraces(capitalizetitle(data.strip()))
+    bibtex = title
+    return bibtex
+
+
+#
+# function to compare entry lists
+#
+def entry_cmp(x, y):
+    return cmp(x[0], y[0])
+
+
+#
+# print the XML for the transformed "filecont_source"
+#
+def bibtexdecoder(filecont_source):
+    filecont = []
+    file = []
+    
+    # want @<alphanumeric chars><spaces>{<spaces><any chars>,
+    pubtype_rex = re.compile('@(\w*)\s*{\s*(.*),')
+    endtype_rex = re.compile('}\s*$')
+    endtag_rex = re.compile('^\s*}\s*$')
+
+    bracefield_rex = re.compile('\s*(\w*)\s*=\s*(.*)')
+    bracedata_rex = re.compile('\s*(\w*)\s*=\s*{(.*)},?')
+
+    quotefield_rex = re.compile('\s*(\w*)\s*=\s*(.*)')
+    quotedata_rex = re.compile('\s*(\w*)\s*=\s*"(.*)",?')
+
+    for line in filecont_source:
+        line = line[:-1]
+
+        # encode character entities
+        line = string.replace(line, '&', '&amp;')
+        line = string.replace(line, '<', '&lt;')
+        line = string.replace(line, '>', '&gt;')
+
+        # start entry: publication type (store for later use)
+        if pubtype_rex.match(line):
+        # want @<alphanumeric chars><spaces>{<spaces><any chars>,
+            entrycont = {}
+            entry = []
+            entrytype = pubtype_rex.sub('\g<1>',line)
+            entrytype = string.lower(entrytype)
+            entryid   = pubtype_rex.sub('\g<2>', line)
+
+        # end entry if just a }
+        elif endtype_rex.match(line):
+            # generate doxygen code for the entry
+
+            # enty type related formattings
+            if entrytype in ('book', 'inbook'):
+                entrycont['title'] = '<em>' + entrycont['title'] + '</em>'
+                if not entrycont.has_key('author'):
+                    entrycont['author'] = entrycont['editor']
+                    entrycont['author']['text'] += ', editors'
+            elif entrytype == 'article':
+                entrycont['journal'] = '<em>' + entrycont['journal'] + '</em>'
+            elif entrytype in ('inproceedings', 'incollection', 'conference'):
+                entrycont['booktitle'] = '<em>' + entrycont['booktitle'] + '</em>'
+            elif entrytype == 'techreport':
+                if not entrycont.has_key('type'):
+                    entrycont['type'] = 'Technical report'
+            elif entrytype == 'mastersthesis':
+                entrycont['type'] = 'Master\'s thesis'
+            elif entrytype == 'phdthesis':
+                entrycont['type'] = 'PhD thesis'
+
+            for eline in entrycont:
+                if eline != '':
+                    eline = latexreplacements(eline)
+
+            if entrycont.has_key('pages') and (entrycont['pages'] != ''):
+                entrycont['pages'] = string.replace(entrycont['pages'], '--', '-')
+
+            if entrycont.has_key('author') and (entrycont['author'] != ''):
+                entry.append(entrycont['author']['text'] + '.')
+            if entrycont.has_key('title') and (entrycont['title'] != ''):
+                entry.append(entrycont['title'] + '.')
+            if entrycont.has_key('journal') and (entrycont['journal'] != ''):
+                entry.append(entrycont['journal'] + ',')
+            if entrycont.has_key('booktitle') and (entrycont['booktitle'] != ''):
+                entry.append('In ' + entrycont['booktitle'] + ',')
+            if entrycont.has_key('type') and (entrycont['type'] != ''):
+                eline = entrycont['type']
+                if entrycont.has_key('number') and (entrycont['number'] != ''):
+                    eline += ' ' + entrycont['number']
+                eline += ','
+                entry.append(eline)
+            if entrycont.has_key('institution') and (entrycont['institution'] != ''):
+                entry.append(entrycont['institution'] + ',')
+            if entrycont.has_key('publisher') and (entrycont['publisher'] != ''):
+                entry.append(entrycont['publisher'] + ',')
+            if entrycont.has_key('school') and (entrycont['school'] != ''):
+                entry.append(entrycont['school'] + ',')
+            if entrycont.has_key('address') and (entrycont['address'] != ''):
+                entry.append(entrycont['address'] + ',')
+            if entrycont.has_key('edition') and (entrycont['edition'] != ''):
+                entry.append(entrycont['edition'] + ' edition,')
+            if entrycont.has_key('howpublished') and (entrycont['howpublished'] != ''):
+                entry.append(entrycont['howpublished'] + ',')
+            if entrycont.has_key('volume') and (entrycont['volume'] != ''):
+                eline = entrycont['volume'];
+                if entrycont.has_key('number') and (entrycont['number'] != ''):
+                    eline += '(' + entrycont['number'] + ')'
+                if entrycont.has_key('pages') and (entrycont['pages'] != ''):
+                    eline += ':' + entrycont['pages']
+                eline += ','
+                entry.append(eline)
+            else:
+                if entrycont.has_key('pages') and (entrycont['pages'] != ''):
+                    entry.append('pages ' + entrycont['pages'] + ',')
+            if entrycont.has_key('year') and (entrycont['year'] != ''):
+                if entrycont.has_key('month') and (entrycont['month'] != ''):
+                    entry.append(entrycont['month'] + ' ' + entrycont['year'] + '.')
+                else:
+                    entry.append(entrycont['year'] + '.')
+            if entrycont.has_key('note') and (entrycont['note'] != ''):
+                entry.append(entrycont['note'] + '.')
+            if entrycont.has_key('url') and (entrycont['url'] != ''):
+                entry.append(entrycont['url'] + '.')
+
+            # generate keys for sorting and for the output
+            sortkey = ''
+            bibkey = ''
+            if entrycont.has_key('author'):
+                for author in entrycont['author']['list']:
+                    sortkey += copychars(author, author.rfind(' ')+1, len(author))
+                bibkey = entrycont['author']['abbrev']
+            else:
+                bibkey = 'x'
+            if entrycont.has_key('year'):
+                sortkey += entrycont['year']
+                bibkey += entrycont['year'][-2:]
+            if entrycont.has_key('title'):
+                sortkey += entrycont['title']
+            if entrycont.has_key('key'):
+                sortkey = entrycont['key'] + sortkey
+                bibkey = entrycont['key']
+            entry.insert(0, sortkey)
+            entry.insert(1, bibkey)
+            entry.insert(2, entryid)
+           
+            # add the entry to the file contents
+            filecont.append(entry)
+
+        else:
+            # field, publication info
+            field = ''
+            data = ''
+            
+            # field = {data} entries
+            if bracedata_rex.match(line):
+                field = bracefield_rex.sub('\g<1>', line)
+                field = string.lower(field)
+                data =  bracedata_rex.sub('\g<2>', line)
+
+            # field = "data" entries
+            elif quotedata_rex.match(line):
+                field = quotefield_rex.sub('\g<1>', line)
+                field = string.lower(field)
+                data =  quotedata_rex.sub('\g<2>', line)
+
+            # field = data entries
+            elif data_rex.match(line):
+                field = field_rex.sub('\g<1>', line)
+                field = string.lower(field)
+                data =  data_rex.sub('\g<2>', line)
+
+            if field == 'url':
+                data = '\\url{' + data.strip() + '}'
+            
+            if field in ('author', 'editor'):
+                entrycont[field] = bibtexauthor(data)
+                line = ''
+            elif field == 'title':
+                line = bibtextitle(data, entrytype)
+            elif field != '':
+                line = removebraces(transformurls(data.strip()))
+
+            if line != '':
+                line = latexreplacements(line)
+                entrycont[field] = line
+
+
+    # sort entries
+    filecont.sort(entry_cmp)
+    
+    # count the bibtex keys
+    keytable = {}
+    counttable = {}
+    for entry in filecont:
+        bibkey = entry[1]
+        if not keytable.has_key(bibkey):
+            keytable[bibkey] = 1
+        else:
+            keytable[bibkey] += 1
+
+    for bibkey in keytable.keys():
+        counttable[bibkey] = 0
+    
+    # generate output
+    for entry in filecont:
+        # generate output key form the bibtex key
+        bibkey = entry[1]
+        entryid = entry[2]
+        if keytable[bibkey] == 1:
+            outkey = bibkey
+        else:
+            outkey = bibkey + chr(97 + counttable[bibkey])
+        counttable[bibkey] += 1
+        
+        # append the entry code to the output
+        file.append('\\section ' + entryid + ' [' + outkey + ']')
+        file.append('<div style="' + divstyle + '">')
+        for line in entry[3:]:
+            file.append(line)
+        file.append('</div>')
+        file.append('')
+
+    return file
+
+
+#
+# return 1 iff abbr is in line but not inside braces or quotes
+# assumes that abbr appears only once on the line (out of braces and quotes)
+#
+def verify_out_of_braces(line, abbr):
+
+    phrase_split = delimiter_rex.split(line)
+
+    abbr_rex = re.compile( '\\b' + abbr + '\\b', re.I)
+
+    open_brace = 0
+    open_quote = 0
+
+    for phrase in phrase_split:
+        if phrase == "{":
+            open_brace = open_brace + 1
+        elif phrase == "}":
+            open_brace = open_brace - 1
+        elif phrase == '"':
+            if open_quote == 1:
+                open_quote = 0
+            else:
+                open_quote = 1
+        elif abbr_rex.search(phrase):
+            if open_brace == 0 and open_quote == 0:
+                return 1
+
+    return 0
+
+
+#
+# a line in the form phrase1 # phrase2 # ... # phrasen
+# is returned as phrase1 phrase2 ... phrasen
+# with the correct punctuation
+# Bug: Doesn't always work with multiple abbreviations plugged in
+#
+def concat_line(line):
+    # only look at part after equals
+    field = field_rex.sub('\g<1>',line)
+    rest = field_rex.sub('\g<2>',line)
+
+    concat_line = field + ' ='
+
+    pound_split = concatsplit_rex.split(rest)
+
+    phrase_count = 0
+    length = len(pound_split)
+
+    for phrase in pound_split:
+        phrase = phrase.strip()
+        if phrase_count != 0:
+            if phrase.startswith('"') or phrase.startswith('{'):
+                phrase = phrase[1:]
+        elif phrase.startswith('"'):
+            phrase = phrase.replace('"','{',1)
+
+        if phrase_count != length-1:
+            if phrase.endswith('"') or phrase.endswith('}'):
+                phrase = phrase[:-1]
+        else:
+            if phrase.endswith('"'):
+                phrase = phrase[:-1]
+                phrase = phrase + "}"
+            elif phrase.endswith('",'):
+                phrase = phrase[:-2]
+                phrase = phrase + "},"
+
+        # if phrase did have \#, add the \# back
+        if phrase.endswith('\\'):
+            phrase = phrase + "#"
+        concat_line = concat_line + ' ' + phrase
+
+        phrase_count = phrase_count + 1
+
+    return concat_line
+
+
+#
+# substitute abbreviations into filecont
+# @param filecont_source - string of data from file
+#
+def bibtex_replace_abbreviations(filecont_source):
+    filecont = filecont_source.splitlines()
+
+    #  These are defined in bibtex, so we'll define them too
+    abbr_list = ['jan','feb','mar','apr','may','jun',
+                 'jul','aug','sep','oct','nov','dec']
+    value_list = ['January','February','March','April',
+                  'May','June','July','August','September',
+                  'October','November','December']
+
+    abbr_rex = []
+    total_abbr_count = 0
+
+    front = '\\b'
+    back = '(,?)\\b'
+
+    for x in abbr_list:
+        abbr_rex.append( re.compile( front + abbr_list[total_abbr_count] + back, re.I ) )
+        total_abbr_count = total_abbr_count + 1
+
+
+    abbrdef_rex = re.compile('\s*@string\s*{\s*('+ valid_name_chars +'*)\s*=(.*)',
+                             re.I)
+
+    comment_rex = re.compile('@comment\s*{',re.I)
+    preamble_rex = re.compile('@preamble\s*{',re.I)
+
+    waiting_for_end_string = 0
+    i = 0
+    filecont2 = ''
+
+    for line in filecont:
+        if line == ' ' or line == '':
+            continue
+
+        if waiting_for_end_string:
+            if re.search('}',line):
+                waiting_for_end_string = 0
+                continue
+
+        if abbrdef_rex.search(line):
+            abbr = abbrdef_rex.sub('\g<1>', line)
+
+            if abbr_list.count(abbr) == 0:
+                val = abbrdef_rex.sub('\g<2>', line)
+                abbr_list.append(abbr)
+                value_list.append(string.strip(val))
+                abbr_rex.append( re.compile( front + abbr_list[total_abbr_count] + back, re.I ) )
+                total_abbr_count = total_abbr_count + 1
+            waiting_for_end_string = 1
+            continue
+
+        if comment_rex.search(line):
+            waiting_for_end_string = 1
+            continue
+
+        if preamble_rex.search(line):
+            waiting_for_end_string = 1
+            continue
+
+
+        # replace subsequent abbreviations with the value
+        abbr_count = 0
+
+        for x in abbr_list:
+
+            if abbr_rex[abbr_count].search(line):
+                if verify_out_of_braces(line,abbr_list[abbr_count]) == 1:
+                    line = abbr_rex[abbr_count].sub( value_list[abbr_count] + '\g<1>', line)
+                # Check for # concatenations
+                if concatsplit_rex.search(line):
+                    line = concat_line(line)
+            abbr_count = abbr_count + 1
+
+
+        filecont2 = filecont2 + line + '\n'
+        i = i+1
+
+
+    # Do one final pass over file
+
+    # make sure that didn't end up with {" or }" after the substitution
+    filecont2 = filecont2.replace('{"','{{')
+    filecont2 = filecont2.replace('"}','}}')
+
+    afterquotevalue_rex = re.compile('"\s*,\s*')
+    afterbrace_rex = re.compile('"\s*}')
+    afterbracevalue_rex = re.compile('(=\s*{[^=]*)},\s*')
+
+    # add new lines to data that changed because of abbreviation substitutions
+    filecont2 = afterquotevalue_rex.sub('",\n', filecont2)
+    filecont2 = afterbrace_rex.sub('"\n}', filecont2)
+    filecont2 = afterbracevalue_rex.sub('\g<1>},\n', filecont2)
+
+    return filecont2
+
+#
+# convert @type( ... ) to @type{ ... }
+#
+def no_outer_parens(filecont):
+
+    # do checking for open parens
+    # will convert to braces
+    paren_split = re.split('([(){}])',filecont)
+
+    open_paren_count = 0
+    open_type = 0
+    look_next = 0
+
+    # rebuild filecont
+    filecont = ''
+
+    at_rex = re.compile('@\w*')
+
+    for phrase in paren_split:
+        if look_next == 1:
+            if phrase == '(':
+                phrase = '{'
+                open_paren_count = open_paren_count + 1
+            else:
+                open_type = 0
+            look_next = 0
+
+        if phrase == '(':
+            open_paren_count = open_paren_count + 1
+
+        elif phrase == ')':
+            open_paren_count = open_paren_count - 1
+            if open_type == 1 and open_paren_count == 0:
+                phrase = '}'
+                open_type = 0
+
+        elif at_rex.search( phrase ):
+            open_type = 1
+            look_next = 1
+
+        filecont = filecont + phrase
+
+    return filecont
+
+
+#
+# make all whitespace into just one space
+# format the bibtex file into a usable form.
+#
+def bibtexwasher(filecont_source):
+
+    space_rex = re.compile('\s+')
+    comment_rex = re.compile('\s*%')
+
+    filecont = []
+
+    # remove trailing and excessive whitespace
+    # ignore comments
+    for line in filecont_source:
+        line = string.strip(line)
+        line = space_rex.sub(' ', line)
+        # ignore comments
+        if not comment_rex.match(line) and line != '':
+            filecont.append(' '+ line)
+
+    filecont = string.join(filecont, '')
+
+    # the file is in one long string
+
+    filecont = no_outer_parens(filecont)
+
+    #
+    # split lines according to preferred syntax scheme
+    #
+    filecont = re.sub('(=\s*{[^=]*)},', '\g<1>},\n', filecont)
+
+    # add new lines after commas that are after values
+    filecont = re.sub('"\s*,', '",\n', filecont)
+    filecont = re.sub('=\s*([\w\d]+)\s*,', '= \g<1>,\n', filecont)
+    filecont = re.sub('(@\w*)\s*({(\s*)[^,\s]*)\s*,',
+                          '\n\n\g<1>\g<2>,\n', filecont)
+
+    # add new lines after }
+    filecont = re.sub('"\s*}','"\n}\n', filecont)
+    filecont = re.sub('}\s*,','},\n', filecont)
+
+
+    filecont = re.sub('@(\w*)', '\n@\g<1>', filecont)
+
+    # character encoding, reserved latex characters
+    filecont = re.sub('{\\\&}', '&', filecont)
+    filecont = re.sub('\\\&', '&', filecont)
+
+    # do checking for open braces to get format correct
+    open_brace_count = 0
+    brace_split = re.split('([{}])',filecont)
+
+    # rebuild filecont
+    filecont = ''
+
+    for phrase in brace_split:
+        if phrase == '{':
+            open_brace_count = open_brace_count + 1
+        elif phrase == '}':
+            open_brace_count = open_brace_count - 1
+            if open_brace_count == 0:
+                filecont = filecont + '\n'
+
+        filecont = filecont + phrase
+
+    filecont2 = bibtex_replace_abbreviations(filecont)
+
+    # gather
+    filecont = filecont2.splitlines()
+    i=0
+    j=0         # count the number of blank lines
+    for line in filecont:
+        # ignore blank lines
+        if line == '' or line == ' ':
+            j = j+1
+            continue
+        filecont[i] = line + '\n'
+        i = i+1
+
+    # get rid of the extra stuff at the end of the array
+    # (The extra stuff are duplicates that are in the array because
+    # blank lines were removed.)
+    length = len( filecont)
+    filecont[length-j:length] = []
+
+    return filecont
+
+
+def filehandler(filepath):
+    try:
+        fd = open(filepath, 'r')
+        filecont_source = fd.readlines()
+        fd.close()
+    except:
+        print 'Could not open file:', filepath
+    washeddata = bibtexwasher(filecont_source)
+    outdata = bibtexdecoder(washeddata)
+    print '/**'
+    print '\page references References'
+    print
+    for line in outdata:
+        print line
+    print '*/'
+
+
+# main program
+
+def main():
+    import sys
+    if sys.argv[1:]:
+        filepath = sys.argv[1]
+    else:
+        print "No input file"
+        sys.exit()
+    filehandler(filepath)
+
+if __name__ == "__main__": main()
+
+
+# end python script
Index: test/CMakeLists.txt
===================================================================
--- test/CMakeLists.txt	(revision 1065)
+++ test/CMakeLists.txt	(revision 1038)
@@ -42,5 +42,4 @@
   max_cardinality_search_test
   max_clique_test
-  max_flow_test
   min_cost_arborescence_test
   min_cost_flow_test
@@ -49,4 +48,5 @@
   path_test
   planarity_test
+  preflow_test
   radix_sort_test
   random_test
@@ -70,5 +70,5 @@
   ENDIF()
   IF(LEMON_HAVE_CPLEX)
-    SET(LP_TEST_LIBS ${LP_TEST_LIBS} ${ILOG_LIBRARIES})
+    SET(LP_TEST_LIBS ${LP_TEST_LIBS} ${CPLEX_LIBRARIES})
   ENDIF()
   IF(LEMON_HAVE_CLP)
@@ -94,5 +94,5 @@
     GET_FILENAME_COMPONENT(TARGET_PATH ${TARGET_LOC} PATH)
     ADD_CUSTOM_COMMAND(TARGET lp_test POST_BUILD
-      COMMAND ${CMAKE_COMMAND} -E copy ${ILOG_CPLEX_DLL} ${TARGET_PATH}
+      COMMAND ${CMAKE_COMMAND} -E copy ${CPLEX_BIN_DIR}/cplex.dll ${TARGET_PATH}
     )
   ENDIF()
@@ -112,5 +112,5 @@
   ENDIF()
   IF(LEMON_HAVE_CPLEX)
-    SET(MIP_TEST_LIBS ${MIP_TEST_LIBS} ${ILOG_LIBRARIES})
+    SET(MIP_TEST_LIBS ${MIP_TEST_LIBS} ${CPLEX_LIBRARIES})
   ENDIF()
   IF(LEMON_HAVE_CBC)
@@ -136,5 +136,5 @@
     GET_FILENAME_COMPONENT(TARGET_PATH ${TARGET_LOC} PATH)
     ADD_CUSTOM_COMMAND(TARGET mip_test POST_BUILD
-      COMMAND ${CMAKE_COMMAND} -E copy ${ILOG_CPLEX_DLL} ${TARGET_PATH}
+      COMMAND ${CMAKE_COMMAND} -E copy ${CPLEX_BIN_DIR}/cplex.dll ${TARGET_PATH}
     )
   ENDIF()
Index: test/lp_test.cc
===================================================================
--- test/lp_test.cc	(revision 1064)
+++ test/lp_test.cc	(revision 988)
@@ -241,5 +241,6 @@
   {
     LP::DualExpr e,f,g;
-    LP::Row p1 = INVALID, p2 = INVALID;
+    LP::Row p1 = INVALID, p2 = INVALID, p3 = INVALID,
+      p4 = INVALID, p5 = INVALID;
 
     e[p1]=2;
Index: test/maps_test.cc
===================================================================
--- test/maps_test.cc	(revision 1067)
+++ test/maps_test.cc	(revision 998)
@@ -536,6 +536,5 @@
 
     typedef Orienter<Graph, const ConstMap<Edge, bool> > Digraph;
-    ConstMap<Edge, bool> true_edge_map(true);
-    Digraph dgr(gr, true_edge_map);
+    Digraph dgr(gr, constMap<Edge, bool>(true));
     OutDegMap<Digraph> odm(dgr);
     InDegMap<Digraph> idm(dgr);
Index: st/max_flow_test.cc
===================================================================
--- test/max_flow_test.cc	(revision 1060)
+++ 	(revision )
@@ -1,395 +1,0 @@
-/* -*- mode: C++; indent-tabs-mode: nil; -*-
- *
- * This file is a part of LEMON, a generic C++ optimization library.
- *
- * Copyright (C) 2003-2010
- * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
- * (Egervary Research Group on Combinatorial Optimization, EGRES).
- *
- * Permission to use, modify and distribute this software is granted
- * provided that this copyright notice appears in all copies. For
- * precise terms see the accompanying LICENSE file.
- *
- * This software is provided "AS IS" with no warranty of any kind,
- * express or implied, and with no claim as to its suitability for any
- * purpose.
- *
- */
-
-#include <iostream>
-
-#include "test_tools.h"
-#include <lemon/smart_graph.h>
-#include <lemon/preflow.h>
-#include <lemon/edmonds_karp.h>
-#include <lemon/concepts/digraph.h>
-#include <lemon/concepts/maps.h>
-#include <lemon/lgf_reader.h>
-#include <lemon/elevator.h>
-
-using namespace lemon;
-
-char test_lgf[] =
-  "@nodes\n"
-  "label\n"
-  "0\n"
-  "1\n"
-  "2\n"
-  "3\n"
-  "4\n"
-  "5\n"
-  "6\n"
-  "7\n"
-  "8\n"
-  "9\n"
-  "@arcs\n"
-  "    label capacity\n"
-  "0 1 0     20\n"
-  "0 2 1     0\n"
-  "1 1 2     3\n"
-  "1 2 3     8\n"
-  "1 3 4     8\n"
-  "2 5 5     5\n"
-  "3 2 6     5\n"
-  "3 5 7     5\n"
-  "3 6 8     5\n"
-  "4 3 9     3\n"
-  "5 7 10    3\n"
-  "5 6 11    10\n"
-  "5 8 12    10\n"
-  "6 8 13    8\n"
-  "8 9 14    20\n"
-  "8 1 15    5\n"
-  "9 5 16    5\n"
-  "@attributes\n"
-  "source 1\n"
-  "target 8\n";
-
-
-// Checks the general interface of a max flow algorithm
-template <typename GR, typename CAP>
-struct MaxFlowClassConcept
-{
-
-  template <typename MF>
-  struct Constraints {
-
-    typedef typename GR::Node Node;
-    typedef typename GR::Arc Arc;
-    typedef typename CAP::Value Value;
-    typedef concepts::ReadWriteMap<Arc, Value> FlowMap;
-    typedef concepts::WriteMap<Node, bool> CutMap;
-
-    GR g;
-    Node n;
-    Arc e;
-    CAP cap;
-    FlowMap flow;
-    CutMap cut;
-    Value v;
-    bool b;
-
-    void constraints() {
-      checkConcept<concepts::Digraph, GR>();
-
-      const Constraints& me = *this;
-
-      typedef typename MF
-          ::template SetFlowMap<FlowMap>
-          ::Create MaxFlowType;
-      typedef typename MF::Create MaxFlowType2;
-      MaxFlowType max_flow(me.g, me.cap, me.n, me.n);
-      const MaxFlowType& const_max_flow = max_flow;
-
-      max_flow
-          .capacityMap(cap)
-          .flowMap(flow)
-          .source(n)
-          .target(n);
-
-      typename MaxFlowType::Tolerance tol = const_max_flow.tolerance();
-      max_flow.tolerance(tol);
-
-      max_flow.init();
-      max_flow.init(cap);
-      max_flow.run();
-
-      v = const_max_flow.flowValue();
-      v = const_max_flow.flow(e);
-      const FlowMap& fm = const_max_flow.flowMap();
-
-      b = const_max_flow.minCut(n);
-      const_max_flow.minCutMap(cut);
-
-      ignore_unused_variable_warning(fm);
-    }
-
-  };
-
-};
-
-// Checks the specific parts of Preflow's interface
-void checkPreflowCompile()
-{
-  typedef int Value;
-  typedef concepts::Digraph Digraph;
-  typedef concepts::ReadMap<Digraph::Arc, Value> CapMap;
-  typedef Elevator<Digraph, Digraph::Node> Elev;
-  typedef LinkedElevator<Digraph, Digraph::Node> LinkedElev;
-
-  Digraph g;
-  Digraph::Node n;
-  CapMap cap;
-
-  typedef Preflow<Digraph, CapMap>
-      ::SetElevator<Elev>
-      ::SetStandardElevator<LinkedElev>
-      ::Create PreflowType;
-  PreflowType preflow_test(g, cap, n, n);
-  const PreflowType& const_preflow_test = preflow_test;
-
-  const PreflowType::Elevator& elev = const_preflow_test.elevator();
-  preflow_test.elevator(const_cast<PreflowType::Elevator&>(elev));
-
-  bool b = preflow_test.init(cap);
-  preflow_test.startFirstPhase();
-  preflow_test.startSecondPhase();
-  preflow_test.runMinCut();
-
-  ignore_unused_variable_warning(b);
-}
-
-// Checks the specific parts of EdmondsKarp's interface
-void checkEdmondsKarpCompile()
-{
-  typedef int Value;
-  typedef concepts::Digraph Digraph;
-  typedef concepts::ReadMap<Digraph::Arc, Value> CapMap;
-  typedef Elevator<Digraph, Digraph::Node> Elev;
-  typedef LinkedElevator<Digraph, Digraph::Node> LinkedElev;
-
-  Digraph g;
-  Digraph::Node n;
-  CapMap cap;
-
-  EdmondsKarp<Digraph, CapMap> ek_test(g, cap, n, n);
-
-  ek_test.init(cap);
-  bool b = ek_test.checkedInit(cap);
-  b = ek_test.augment();
-  ek_test.start();
-
-  ignore_unused_variable_warning(b);
-}
-
-
-template <typename T>
-T cutValue (const SmartDigraph& g,
-              const SmartDigraph::NodeMap<bool>& cut,
-              const SmartDigraph::ArcMap<T>& cap) {
-
-  T c=0;
-  for(SmartDigraph::ArcIt e(g); e!=INVALID; ++e) {
-    if (cut[g.source(e)] && !cut[g.target(e)]) c+=cap[e];
-  }
-  return c;
-}
-
-template <typename T>
-bool checkFlow(const SmartDigraph& g,
-               const SmartDigraph::ArcMap<T>& flow,
-               const SmartDigraph::ArcMap<T>& cap,
-               SmartDigraph::Node s, SmartDigraph::Node t) {
-
-  for (SmartDigraph::ArcIt e(g); e != INVALID; ++e) {
-    if (flow[e] < 0 || flow[e] > cap[e]) return false;
-  }
-
-  for (SmartDigraph::NodeIt n(g); n != INVALID; ++n) {
-    if (n == s || n == t) continue;
-    T sum = 0;
-    for (SmartDigraph::OutArcIt e(g, n); e != INVALID; ++e) {
-      sum += flow[e];
-    }
-    for (SmartDigraph::InArcIt e(g, n); e != INVALID; ++e) {
-      sum -= flow[e];
-    }
-    if (sum != 0) return false;
-  }
-  return true;
-}
-
-void initFlowTest()
-{
-  DIGRAPH_TYPEDEFS(SmartDigraph);
-  
-  SmartDigraph g;
-  SmartDigraph::ArcMap<int> cap(g),iflow(g);
-  Node s=g.addNode(); Node t=g.addNode();
-  Node n1=g.addNode(); Node n2=g.addNode();
-  Arc a;
-  a=g.addArc(s,n1); cap[a]=20; iflow[a]=20;
-  a=g.addArc(n1,n2); cap[a]=10; iflow[a]=0;
-  a=g.addArc(n2,t); cap[a]=20; iflow[a]=0;
-
-  Preflow<SmartDigraph> pre(g,cap,s,t);
-  pre.init(iflow);
-  pre.startFirstPhase();
-  check(pre.flowValue() == 10, "The incorrect max flow value.");
-  check(pre.minCut(s), "Wrong min cut (Node s).");
-  check(pre.minCut(n1), "Wrong min cut (Node n1).");
-  check(!pre.minCut(n2), "Wrong min cut (Node n2).");
-  check(!pre.minCut(t), "Wrong min cut (Node t).");
-}
-
-template <typename MF, typename SF>
-void checkMaxFlowAlg() {
-  typedef SmartDigraph Digraph;
-  DIGRAPH_TYPEDEFS(Digraph);
-
-  typedef typename MF::Value Value;
-  typedef Digraph::ArcMap<Value> CapMap;
-  typedef CapMap FlowMap;
-  typedef BoolNodeMap CutMap;
-
-  Digraph g;
-  Node s, t;
-  CapMap cap(g);
-  std::istringstream input(test_lgf);
-  DigraphReader<Digraph>(g,input)
-      .arcMap("capacity", cap)
-      .node("source",s)
-      .node("target",t)
-      .run();
-
-  MF max_flow(g, cap, s, t);
-  max_flow.run();
-
-  check(checkFlow(g, max_flow.flowMap(), cap, s, t),
-        "The flow is not feasible.");
-
-  CutMap min_cut(g);
-  max_flow.minCutMap(min_cut);
-  Value min_cut_value = cutValue(g, min_cut, cap);
-
-  check(max_flow.flowValue() == min_cut_value,
-        "The max flow value is not equal to the min cut value.");
-
-  FlowMap flow(g);
-  for (ArcIt e(g); e != INVALID; ++e) flow[e] = max_flow.flowMap()[e];
-
-  Value flow_value = max_flow.flowValue();
-
-  for (ArcIt e(g); e != INVALID; ++e) cap[e] = 2 * cap[e];
-  max_flow.init(flow);
-
-  SF::startFirstPhase(max_flow);       // start first phase of the algorithm
-
-  CutMap min_cut1(g);
-  max_flow.minCutMap(min_cut1);
-  min_cut_value = cutValue(g, min_cut1, cap);
-
-  check(max_flow.flowValue() == min_cut_value &&
-        min_cut_value == 2 * flow_value,
-        "The max flow value or the min cut value is wrong.");
-
-  SF::startSecondPhase(max_flow);       // start second phase of the algorithm
-
-  check(checkFlow(g, max_flow.flowMap(), cap, s, t),
-        "The flow is not feasible.");
-
-  CutMap min_cut2(g);
-  max_flow.minCutMap(min_cut2);
-  min_cut_value = cutValue(g, min_cut2, cap);
-
-  check(max_flow.flowValue() == min_cut_value &&
-        min_cut_value == 2 * flow_value,
-        "The max flow value or the min cut value was not doubled");
-
-
-  max_flow.flowMap(flow);
-
-  NodeIt tmp1(g, s);
-  ++tmp1;
-  if (tmp1 != INVALID) s = tmp1;
-
-  NodeIt tmp2(g, t);
-  ++tmp2;
-  if (tmp2 != INVALID) t = tmp2;
-
-  max_flow.source(s);
-  max_flow.target(t);
-
-  max_flow.run();
-
-  CutMap min_cut3(g);
-  max_flow.minCutMap(min_cut3);
-  min_cut_value=cutValue(g, min_cut3, cap);
-
-  check(max_flow.flowValue() == min_cut_value,
-        "The max flow value or the min cut value is wrong.");
-}
-
-// Struct for calling start functions of a general max flow algorithm
-template <typename MF>
-struct GeneralStartFunctions {
-
-  static void startFirstPhase(MF& mf) {
-    mf.start();
-  }
-
-  static void startSecondPhase(MF& mf) {
-    ignore_unused_variable_warning(mf);
-  }
-
-};
-
-// Struct for calling start functions of Preflow
-template <typename MF>
-struct PreflowStartFunctions {
-
-  static void startFirstPhase(MF& mf) {
-    mf.startFirstPhase();
-  }
-
-  static void startSecondPhase(MF& mf) {
-    mf.startSecondPhase();
-  }
-
-};
-
-int main() {
-
-  typedef concepts::Digraph GR;
-  typedef concepts::ReadMap<GR::Arc, int> CM1;
-  typedef concepts::ReadMap<GR::Arc, double> CM2;
-
-  // Check the interface of Preflow
-  checkConcept< MaxFlowClassConcept<GR, CM1>,
-                Preflow<GR, CM1> >();
-  checkConcept< MaxFlowClassConcept<GR, CM2>,
-                Preflow<GR, CM2> >();
-
-  // Check the interface of EdmondsKarp
-  checkConcept< MaxFlowClassConcept<GR, CM1>,
-                EdmondsKarp<GR, CM1> >();
-  checkConcept< MaxFlowClassConcept<GR, CM2>,
-                EdmondsKarp<GR, CM2> >();
-
-  // Check Preflow
-  typedef Preflow<SmartDigraph, SmartDigraph::ArcMap<int> > PType1;
-  typedef Preflow<SmartDigraph, SmartDigraph::ArcMap<float> > PType2;
-  checkMaxFlowAlg<PType1, PreflowStartFunctions<PType1> >();
-  checkMaxFlowAlg<PType2, PreflowStartFunctions<PType2> >();
-  initFlowTest();
-  
-  // Check EdmondsKarp
-  typedef EdmondsKarp<SmartDigraph, SmartDigraph::ArcMap<int> > EKType1;
-  typedef EdmondsKarp<SmartDigraph, SmartDigraph::ArcMap<float> > EKType2;
-  checkMaxFlowAlg<EKType1, GeneralStartFunctions<EKType1> >();
-  checkMaxFlowAlg<EKType2, GeneralStartFunctions<EKType2> >();
-
-  initFlowTest();
-  
-  return 0;
-}
Index: test/path_test.cc
===================================================================
--- test/path_test.cc	(revision 1044)
+++ test/path_test.cc	(revision 990)
@@ -22,5 +22,4 @@
 #include <lemon/concepts/path.h>
 #include <lemon/concepts/digraph.h>
-#include <lemon/concept_check.h>
 
 #include <lemon/path.h>
@@ -32,307 +31,42 @@
 using namespace lemon;
 
-template <typename GR>
-void checkConcepts() {
-  checkConcept<concepts::Path<GR>, concepts::Path<GR> >();
-  checkConcept<concepts::Path<GR>, Path<GR> >();
-  checkConcept<concepts::Path<GR>, SimplePath<GR> >();
-  checkConcept<concepts::Path<GR>, StaticPath<GR> >();
-  checkConcept<concepts::Path<GR>, ListPath<GR> >();
-}
-
-// Conecpt checking for path structures
-void checkPathConcepts() {
-  checkConcepts<concepts::Digraph>();
-  checkConcepts<ListDigraph>();
+void check_concepts() {
+  checkConcept<concepts::Path<ListDigraph>, concepts::Path<ListDigraph> >();
+  checkConcept<concepts::Path<ListDigraph>, Path<ListDigraph> >();
+  checkConcept<concepts::Path<ListDigraph>, SimplePath<ListDigraph> >();
+  checkConcept<concepts::Path<ListDigraph>, StaticPath<ListDigraph> >();
+  checkConcept<concepts::Path<ListDigraph>, ListPath<ListDigraph> >();
 }
 
 // Check if proper copy consructor is called (use valgrind for testing)
-template <typename GR, typename P1, typename P2>
-void checkCopy(typename GR::Arc a) {
-  P1 p;
+template<class _Path>
+void checkCopy()
+{
+  ListDigraph g;
+  ListDigraph::Arc a  = g.addArc(g.addNode(), g.addNode());
+  
+  _Path p,q;
   p.addBack(a);
-  P1 q;
-  q = p;
-  P1 r(p);
-  P2 q2;
-  q2 = p;
-  P2 r2(p);
+  q=p;
+  _Path r(p);
+  StaticPath<ListDigraph> s(r);
 }
+  
+int main() {
+  check_concepts();
 
-// Tests for copy constructors and assignment operators of paths
-void checkPathCopy() {
+  checkCopy<Path<ListDigraph> >();
+  checkCopy<SimplePath<ListDigraph> >();
+  checkCopy<ListPath<ListDigraph> >();
+
   ListDigraph g;
-  ListDigraph::Arc a = g.addArc(g.addNode(), g.addNode());
-
-  typedef Path<ListDigraph> Path1;
-  typedef SimplePath<ListDigraph> Path2;
-  typedef ListPath<ListDigraph> Path3;
-  typedef StaticPath<ListDigraph> Path4;
-  checkCopy<ListDigraph, Path1, Path2>(a);
-  checkCopy<ListDigraph, Path1, Path3>(a);
-  checkCopy<ListDigraph, Path1, Path4>(a);
-  checkCopy<ListDigraph, Path2, Path1>(a);
-  checkCopy<ListDigraph, Path2, Path3>(a);
-  checkCopy<ListDigraph, Path2, Path4>(a);
-  checkCopy<ListDigraph, Path3, Path1>(a);
-  checkCopy<ListDigraph, Path3, Path2>(a);
-  checkCopy<ListDigraph, Path3, Path4>(a);
-}
-
-// Class for testing path functions
-class CheckPathFunctions {
-  typedef ListDigraph GR;
-  DIGRAPH_TYPEDEFS(GR);
-  GR gr;
-  const GR& cgr;
-  Node n1, n2, n3, n4;
-  Node tmp_n;
-  Arc a1, a2, a3, a4;
-  Arc tmp_a;
-
-public:
-
-  CheckPathFunctions() : cgr(gr) {
-    n1 = gr.addNode();
-    n2 = gr.addNode();
-    n3 = gr.addNode();
-    n4 = gr.addNode();
-    a1 = gr.addArc(n1, n2);
-    a2 = gr.addArc(n2, n3);
-    a3 = gr.addArc(n3, n4);
-    a4 = gr.addArc(n4, n1);
-  }
-
-  void run() {
-    checkBackAndFrontInsertablePath<Path<GR> >();
-    checkBackAndFrontInsertablePath<ListPath<GR> >();
-    checkBackInsertablePath<SimplePath<GR> >();
-
-    checkListPathSplitAndSplice();
-  }
-
-private:
-
-  template <typename P>
-  void checkBackInsertablePath() {
-
-    // Create and check empty path
-    P p;
-    const P& cp = p;
-    check(cp.empty(), "The path is not empty");
-    check(cp.length() == 0, "The path is not empty");
-//    check(cp.front() == INVALID, "Wrong front()");
-//    check(cp.back() == INVALID, "Wrong back()");
-    typename P::ArcIt ai(cp);
-    check(ai == INVALID, "Wrong ArcIt");
-    check(pathSource(cgr, cp) == INVALID, "Wrong pathSource()");
-    check(pathTarget(cgr, cp) == INVALID, "Wrong pathTarget()");
-    check(checkPath(cgr, cp), "Wrong checkPath()");
-    PathNodeIt<P> ni(cgr, cp);
-    check(ni == INVALID, "Wrong PathNodeIt");
-
-    // Check single-arc path
-    p.addBack(a1);
-    check(!cp.empty(), "Wrong empty()");
-    check(cp.length() == 1, "Wrong length");
-    check(cp.front() == a1, "Wrong front()");
-    check(cp.back() == a1, "Wrong back()");
-    check(cp.nth(0) == a1, "Wrong nth()");
-    ai = cp.nthIt(0);
-    check((tmp_a = ai) == a1, "Wrong nthIt()");
-    check(++ai == INVALID, "Wrong nthIt()");
-    typename P::ArcIt ai2(cp);
-    check((tmp_a = ai2) == a1, "Wrong ArcIt");
-    check(++ai2 == INVALID, "Wrong ArcIt");
-    check(pathSource(cgr, cp) == n1, "Wrong pathSource()");
-    check(pathTarget(cgr, cp) == n2, "Wrong pathTarget()");
-    check(checkPath(cgr, cp), "Wrong checkPath()");
-    PathNodeIt<P> ni2(cgr, cp);
-    check((tmp_n = ni2) == n1, "Wrong PathNodeIt");
-    check((tmp_n = ++ni2) == n2, "Wrong PathNodeIt");
-    check(++ni2 == INVALID, "Wrong PathNodeIt");
-
-    // Check adding more arcs
-    p.addBack(a2);
-    p.addBack(a3);
-    check(!cp.empty(), "Wrong empty()");
-    check(cp.length() == 3, "Wrong length");
-    check(cp.front() == a1, "Wrong front()");
-    check(cp.back() == a3, "Wrong back()");
-    check(cp.nth(0) == a1, "Wrong nth()");
-    check(cp.nth(1) == a2, "Wrong nth()");
-    check(cp.nth(2) == a3, "Wrong nth()");
-    typename P::ArcIt ai3(cp);
-    check((tmp_a = ai3) == a1, "Wrong ArcIt");
-    check((tmp_a = ++ai3) == a2, "Wrong nthIt()");
-    check((tmp_a = ++ai3) == a3, "Wrong nthIt()");
-    check(++ai3 == INVALID, "Wrong nthIt()");
-    ai = cp.nthIt(0);
-    check((tmp_a = ai) == a1, "Wrong nthIt()");
-    check((tmp_a = ++ai) == a2, "Wrong nthIt()");
-    ai = cp.nthIt(2);
-    check((tmp_a = ai) == a3, "Wrong nthIt()");
-    check(++ai == INVALID, "Wrong nthIt()");
-    check(pathSource(cgr, cp) == n1, "Wrong pathSource()");
-    check(pathTarget(cgr, cp) == n4, "Wrong pathTarget()");
-    check(checkPath(cgr, cp), "Wrong checkPath()");
-    PathNodeIt<P> ni3(cgr, cp);
-    check((tmp_n = ni3) == n1, "Wrong PathNodeIt");
-    check((tmp_n = ++ni3) == n2, "Wrong PathNodeIt");
-    check((tmp_n = ++ni3) == n3, "Wrong PathNodeIt");
-    check((tmp_n = ++ni3) == n4, "Wrong PathNodeIt");
-    check(++ni3 == INVALID, "Wrong PathNodeIt");
-
-    // Check arc removal and addition
-    p.eraseBack();
-    p.eraseBack();
-    p.addBack(a2);
-    check(!cp.empty(), "Wrong empty()");
-    check(cp.length() == 2, "Wrong length");
-    check(cp.front() == a1, "Wrong front()");
-    check(cp.back() == a2, "Wrong back()");
-    check(pathSource(cgr, cp) == n1, "Wrong pathSource()");
-    check(pathTarget(cgr, cp) == n3, "Wrong pathTarget()");
-    check(checkPath(cgr, cp), "Wrong checkPath()");
-
-    // Check clear()
-    p.clear();
-    check(cp.empty(), "The path is not empty");
-    check(cp.length() == 0, "The path is not empty");
-
-    // Check inconsistent path
-    p.addBack(a4);
-    p.addBack(a2);
-    p.addBack(a1);
-    check(!cp.empty(), "Wrong empty()");
-    check(cp.length() == 3, "Wrong length");
-    check(cp.front() == a4, "Wrong front()");
-    check(cp.back() == a1, "Wrong back()");
-    check(pathSource(cgr, cp) == n4, "Wrong pathSource()");
-    check(pathTarget(cgr, cp) == n2, "Wrong pathTarget()");
-    check(!checkPath(cgr, cp), "Wrong checkPath()");
-  }
-
-  template <typename P>
-  void checkBackAndFrontInsertablePath() {
-
-    // Include back insertable test cases
-    checkBackInsertablePath<P>();
-
-    // Check front and back insertion
-    P p;
-    const P& cp = p;
-    p.addFront(a4);
-    p.addBack(a1);
-    p.addFront(a3);
-    check(!cp.empty(), "Wrong empty()");
-    check(cp.length() == 3, "Wrong length");
-    check(cp.front() == a3, "Wrong front()");
-    check(cp.back() == a1, "Wrong back()");
-    check(cp.nth(0) == a3, "Wrong nth()");
-    check(cp.nth(1) == a4, "Wrong nth()");
-    check(cp.nth(2) == a1, "Wrong nth()");
-    typename P::ArcIt ai(cp);
-    check((tmp_a = ai) == a3, "Wrong ArcIt");
-    check((tmp_a = ++ai) == a4, "Wrong nthIt()");
-    check((tmp_a = ++ai) == a1, "Wrong nthIt()");
-    check(++ai == INVALID, "Wrong nthIt()");
-    ai = cp.nthIt(0);
-    check((tmp_a = ai) == a3, "Wrong nthIt()");
-    check((tmp_a = ++ai) == a4, "Wrong nthIt()");
-    ai = cp.nthIt(2);
-    check((tmp_a = ai) == a1, "Wrong nthIt()");
-    check(++ai == INVALID, "Wrong nthIt()");
-    check(pathSource(cgr, cp) == n3, "Wrong pathSource()");
-    check(pathTarget(cgr, cp) == n2, "Wrong pathTarget()");
-    check(checkPath(cgr, cp), "Wrong checkPath()");
-
-    // Check eraseFront()
-    p.eraseFront();
-    p.addBack(a2);
-    check(!cp.empty(), "Wrong empty()");
-    check(cp.length() == 3, "Wrong length");
-    check(cp.front() == a4, "Wrong front()");
-    check(cp.back() == a2, "Wrong back()");
-    check(cp.nth(0) == a4, "Wrong nth()");
-    check(cp.nth(1) == a1, "Wrong nth()");
-    check(cp.nth(2) == a2, "Wrong nth()");
-    typename P::ArcIt ai2(cp);
-    check((tmp_a = ai2) == a4, "Wrong ArcIt");
-    check((tmp_a = ++ai2) == a1, "Wrong nthIt()");
-    check((tmp_a = ++ai2) == a2, "Wrong nthIt()");
-    check(++ai2 == INVALID, "Wrong nthIt()");
-    ai = cp.nthIt(0);
-    check((tmp_a = ai) == a4, "Wrong nthIt()");
-    check((tmp_a = ++ai) == a1, "Wrong nthIt()");
-    ai = cp.nthIt(2);
-    check((tmp_a = ai) == a2, "Wrong nthIt()");
-    check(++ai == INVALID, "Wrong nthIt()");
-    check(pathSource(cgr, cp) == n4, "Wrong pathSource()");
-    check(pathTarget(cgr, cp) == n3, "Wrong pathTarget()");
-    check(checkPath(cgr, cp), "Wrong checkPath()");
-  }
-
-  void checkListPathSplitAndSplice() {
-
-    // Build a path with spliceFront() and spliceBack()
-    ListPath<GR> p1, p2, p3, p4;
-    p1.addBack(a3);
-    p1.addFront(a2);
-    p2.addBack(a1);
-    p1.spliceFront(p2);
-    p3.addFront(a4);
-    p1.spliceBack(p3);
-    check(p1.length() == 4, "Wrong length");
-    check(p1.front() == a1, "Wrong front()");
-    check(p1.back() == a4, "Wrong back()");
-    ListPath<GR>::ArcIt ai(p1);
-    check((tmp_a = ai) == a1, "Wrong ArcIt");
-    check((tmp_a = ++ai) == a2, "Wrong nthIt()");
-    check((tmp_a = ++ai) == a3, "Wrong nthIt()");
-    check((tmp_a = ++ai) == a4, "Wrong nthIt()");
-    check(++ai == INVALID, "Wrong nthIt()");
-    check(checkPath(cgr, p1), "Wrong checkPath()");
-
-    // Check split()
-    p1.split(p1.nthIt(2), p2);
-    check(p1.length() == 2, "Wrong length");
-    ai = p1.nthIt(0);
-    check((tmp_a = ai) == a1, "Wrong ArcIt");
-    check((tmp_a = ++ai) == a2, "Wrong nthIt()");
-    check(++ai == INVALID, "Wrong nthIt()");
-    check(checkPath(cgr, p1), "Wrong checkPath()");
-    check(p2.length() == 2, "Wrong length");
-    ai = p2.nthIt(0);
-    check((tmp_a = ai) == a3, "Wrong ArcIt");
-    check((tmp_a = ++ai) == a4, "Wrong nthIt()");
-    check(++ai == INVALID, "Wrong nthIt()");
-    check(checkPath(cgr, p2), "Wrong checkPath()");
-
-    // Check split() and splice()
-    p1.spliceFront(p2);
-    p1.split(p1.nthIt(2), p2);
-    p2.split(p2.nthIt(1), p3);
-    p2.spliceBack(p1);
-    p2.splice(p2.nthIt(1), p3);
-    check(p2.length() == 4, "Wrong length");
-    check(p2.front() == a1, "Wrong front()");
-    check(p2.back() == a4, "Wrong back()");
-    ai = p2.nthIt(0);
-    check((tmp_a = ai) == a1, "Wrong ArcIt");
-    check((tmp_a = ++ai) == a2, "Wrong nthIt()");
-    check((tmp_a = ++ai) == a3, "Wrong nthIt()");
-    check((tmp_a = ++ai) == a4, "Wrong nthIt()");
-    check(++ai == INVALID, "Wrong nthIt()");
-    check(checkPath(cgr, p2), "Wrong checkPath()");
-  }
-
-};
-
-int main() {
-  checkPathConcepts();
-  checkPathCopy();
-  CheckPathFunctions cpf;
-  cpf.run();
+  ListDigraph::Arc a  = g.addArc(g.addNode(), g.addNode());
+  
+  Path<ListDigraph> p;
+  StaticPath<ListDigraph> q,r;
+  p.addBack(a);
+  q=p;
+  r=q;
+  StaticPath<ListDigraph> s(q);
 
   return 0;
Index: test/preflow_test.cc
===================================================================
--- test/preflow_test.cc	(revision 1008)
+++ test/preflow_test.cc	(revision 1008)
@@ -0,0 +1,277 @@
+/* -*- mode: C++; indent-tabs-mode: nil; -*-
+ *
+ * This file is a part of LEMON, a generic C++ optimization library.
+ *
+ * Copyright (C) 2003-2010
+ * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
+ * (Egervary Research Group on Combinatorial Optimization, EGRES).
+ *
+ * Permission to use, modify and distribute this software is granted
+ * provided that this copyright notice appears in all copies. For
+ * precise terms see the accompanying LICENSE file.
+ *
+ * This software is provided "AS IS" with no warranty of any kind,
+ * express or implied, and with no claim as to its suitability for any
+ * purpose.
+ *
+ */
+
+#include <iostream>
+
+#include "test_tools.h"
+#include <lemon/smart_graph.h>
+#include <lemon/preflow.h>
+#include <lemon/concepts/digraph.h>
+#include <lemon/concepts/maps.h>
+#include <lemon/lgf_reader.h>
+#include <lemon/elevator.h>
+
+using namespace lemon;
+
+char test_lgf[] =
+  "@nodes\n"
+  "label\n"
+  "0\n"
+  "1\n"
+  "2\n"
+  "3\n"
+  "4\n"
+  "5\n"
+  "6\n"
+  "7\n"
+  "8\n"
+  "9\n"
+  "@arcs\n"
+  "    label capacity\n"
+  "0 1 0     20\n"
+  "0 2 1     0\n"
+  "1 1 2     3\n"
+  "1 2 3     8\n"
+  "1 3 4     8\n"
+  "2 5 5     5\n"
+  "3 2 6     5\n"
+  "3 5 7     5\n"
+  "3 6 8     5\n"
+  "4 3 9     3\n"
+  "5 7 10    3\n"
+  "5 6 11    10\n"
+  "5 8 12    10\n"
+  "6 8 13    8\n"
+  "8 9 14    20\n"
+  "8 1 15    5\n"
+  "9 5 16    5\n"
+  "@attributes\n"
+  "source 1\n"
+  "target 8\n";
+
+void checkPreflowCompile()
+{
+  typedef int VType;
+  typedef concepts::Digraph Digraph;
+
+  typedef Digraph::Node Node;
+  typedef Digraph::Arc Arc;
+  typedef concepts::ReadMap<Arc,VType> CapMap;
+  typedef concepts::ReadWriteMap<Arc,VType> FlowMap;
+  typedef concepts::WriteMap<Node,bool> CutMap;
+
+  typedef Elevator<Digraph, Digraph::Node> Elev;
+  typedef LinkedElevator<Digraph, Digraph::Node> LinkedElev;
+
+  Digraph g;
+  Node n;
+  Arc e;
+  CapMap cap;
+  FlowMap flow;
+  CutMap cut;
+  VType v;
+  bool b;
+  ignore_unused_variable_warning(v,b);
+
+  typedef Preflow<Digraph, CapMap>
+            ::SetFlowMap<FlowMap>
+            ::SetElevator<Elev>
+            ::SetStandardElevator<LinkedElev>
+            ::Create PreflowType;
+  PreflowType preflow_test(g, cap, n, n);
+  const PreflowType& const_preflow_test = preflow_test;
+
+  const PreflowType::Elevator& elev = const_preflow_test.elevator();
+  preflow_test.elevator(const_cast<PreflowType::Elevator&>(elev));
+  PreflowType::Tolerance tol = const_preflow_test.tolerance();
+  preflow_test.tolerance(tol);
+
+  preflow_test
+    .capacityMap(cap)
+    .flowMap(flow)
+    .source(n)
+    .target(n);
+
+  preflow_test.init();
+  preflow_test.init(cap);
+  preflow_test.startFirstPhase();
+  preflow_test.startSecondPhase();
+  preflow_test.run();
+  preflow_test.runMinCut();
+
+  v = const_preflow_test.flowValue();
+  v = const_preflow_test.flow(e);
+  const FlowMap& fm = const_preflow_test.flowMap();
+  b = const_preflow_test.minCut(n);
+  const_preflow_test.minCutMap(cut);
+
+  ignore_unused_variable_warning(fm);
+}
+
+int cutValue (const SmartDigraph& g,
+              const SmartDigraph::NodeMap<bool>& cut,
+              const SmartDigraph::ArcMap<int>& cap) {
+
+  int c=0;
+  for(SmartDigraph::ArcIt e(g); e!=INVALID; ++e) {
+    if (cut[g.source(e)] && !cut[g.target(e)]) c+=cap[e];
+  }
+  return c;
+}
+
+bool checkFlow(const SmartDigraph& g,
+               const SmartDigraph::ArcMap<int>& flow,
+               const SmartDigraph::ArcMap<int>& cap,
+               SmartDigraph::Node s, SmartDigraph::Node t) {
+
+  for (SmartDigraph::ArcIt e(g); e != INVALID; ++e) {
+    if (flow[e] < 0 || flow[e] > cap[e]) return false;
+  }
+
+  for (SmartDigraph::NodeIt n(g); n != INVALID; ++n) {
+    if (n == s || n == t) continue;
+    int sum = 0;
+    for (SmartDigraph::OutArcIt e(g, n); e != INVALID; ++e) {
+      sum += flow[e];
+    }
+    for (SmartDigraph::InArcIt e(g, n); e != INVALID; ++e) {
+      sum -= flow[e];
+    }
+    if (sum != 0) return false;
+  }
+  return true;
+}
+
+void initFlowTest()
+{
+  DIGRAPH_TYPEDEFS(SmartDigraph);
+  
+  SmartDigraph g;
+  SmartDigraph::ArcMap<int> cap(g),iflow(g);
+  Node s=g.addNode(); Node t=g.addNode();
+  Node n1=g.addNode(); Node n2=g.addNode();
+  Arc a;
+  a=g.addArc(s,n1); cap[a]=20; iflow[a]=20;
+  a=g.addArc(n1,n2); cap[a]=10; iflow[a]=0;
+  a=g.addArc(n2,t); cap[a]=20; iflow[a]=0;
+
+  Preflow<SmartDigraph> pre(g,cap,s,t);
+  pre.init(iflow);
+  pre.startFirstPhase();
+  check(pre.flowValue() == 10, "The incorrect max flow value.");
+  check(pre.minCut(s), "Wrong min cut (Node s).");
+  check(pre.minCut(n1), "Wrong min cut (Node n1).");
+  check(!pre.minCut(n2), "Wrong min cut (Node n2).");
+  check(!pre.minCut(t), "Wrong min cut (Node t).");
+}
+
+
+int main() {
+
+  typedef SmartDigraph Digraph;
+
+  typedef Digraph::Node Node;
+  typedef Digraph::NodeIt NodeIt;
+  typedef Digraph::ArcIt ArcIt;
+  typedef Digraph::ArcMap<int> CapMap;
+  typedef Digraph::ArcMap<int> FlowMap;
+  typedef Digraph::NodeMap<bool> CutMap;
+
+  typedef Preflow<Digraph, CapMap> PType;
+
+  Digraph g;
+  Node s, t;
+  CapMap cap(g);
+  std::istringstream input(test_lgf);
+  DigraphReader<Digraph>(g,input).
+    arcMap("capacity", cap).
+    node("source",s).
+    node("target",t).
+    run();
+
+  PType preflow_test(g, cap, s, t);
+  preflow_test.run();
+
+  check(checkFlow(g, preflow_test.flowMap(), cap, s, t),
+        "The flow is not feasible.");
+
+  CutMap min_cut(g);
+  preflow_test.minCutMap(min_cut);
+  int min_cut_value=cutValue(g,min_cut,cap);
+
+  check(preflow_test.flowValue() == min_cut_value,
+        "The max flow value is not equal to the three min cut values.");
+
+  FlowMap flow(g);
+  for(ArcIt e(g); e!=INVALID; ++e) flow[e] = preflow_test.flowMap()[e];
+
+  int flow_value=preflow_test.flowValue();
+
+  for(ArcIt e(g); e!=INVALID; ++e) cap[e]=2*cap[e];
+  preflow_test.init(flow);
+  preflow_test.startFirstPhase();
+
+  CutMap min_cut1(g);
+  preflow_test.minCutMap(min_cut1);
+  min_cut_value=cutValue(g,min_cut1,cap);
+
+  check(preflow_test.flowValue() == min_cut_value &&
+        min_cut_value == 2*flow_value,
+        "The max flow value or the min cut value is wrong.");
+
+  preflow_test.startSecondPhase();
+
+  check(checkFlow(g, preflow_test.flowMap(), cap, s, t),
+        "The flow is not feasible.");
+
+  CutMap min_cut2(g);
+  preflow_test.minCutMap(min_cut2);
+  min_cut_value=cutValue(g,min_cut2,cap);
+
+  check(preflow_test.flowValue() == min_cut_value &&
+        min_cut_value == 2*flow_value,
+        "The max flow value or the three min cut values were not doubled");
+
+
+  preflow_test.flowMap(flow);
+
+  NodeIt tmp1(g,s);
+  ++tmp1;
+  if ( tmp1 != INVALID ) s=tmp1;
+
+  NodeIt tmp2(g,t);
+  ++tmp2;
+  if ( tmp2 != INVALID ) t=tmp2;
+
+  preflow_test.source(s);
+  preflow_test.target(t);
+
+  preflow_test.run();
+
+  CutMap min_cut3(g);
+  preflow_test.minCutMap(min_cut3);
+  min_cut_value=cutValue(g,min_cut3,cap);
+
+
+  check(preflow_test.flowValue() == min_cut_value,
+        "The max flow value or the three min cut values are incorrect.");
+
+  initFlowTest();
+  
+  return 0;
+}
