!8x      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Safek[fglZOrdGr comes equipped with an Ord instance, so that graphs can be used as e.g. Map keys.fgl Merge the  into the .{Context adjacencies should only refer to either a Node already in a graph or the node in the Context itself (for loops).(Behaviour is undefined if the specified   already exists in the graph.fglMinimum implementation: , , ,  ,  fgl An empty .fglTrue if the given  is empty.fgl Decompose a  into the - found for the given node and the remaining . fgl Create a  from the list of s and s.&For graphs that are also instances of , mkGraph ns es should be equivalent to (6 es . 5 ns) . fglA list of all  s in the . fglDecompose a graph into the  for an arbitrarily-chosen   and the remaining . fglThe number of  s in a . fglThe minimum and maximum   in a .fglA list of all  s in the .fglUnlabeled decomposition.fglUnlabeled context.fgl The same as , only more sure of itself.fgl, decomposition - the context removed from a , and the rest of the .fgl Links to the  , the  ! itself, a label, links from the  .IIn other words, this captures all information regarding the specified   within a graph.fglLabeled links to or from a  .fglQuasi-unlabeled pathfgl Labeled pathfglUnlabeled pathfglQuasi-unlabeled edgefgl Labeled edgefglUnlabeled edgefglQuasi-unlabeled nodefgl Labeled node fglUnlabeled node!fgl0The number of nodes in the graph. An alias for  ."fgl!The number of edges in the graph.Note that this counts every edge found, so if you are representing an unordered graph by having each edge mirrored this will be incorrect.dIf you created an unordered graph by either mirroring every edge (including loops!) or using the undir function in Data.Graph.Inductive.Basic9 then you can safely halve the value returned by this.#fgl6Fold a function over the graph by recursively calling .$fgl5Map a function over the graph by recursively calling .%fglMap a function over the   labels in a graph.&fglMap a function over the  labels in a graph.'fglMap functions over both the   and  labels in a graph.(fgl List all   s in the .)fgl List all  s in the .*fgl$Drop the label component of an edge.+fglAdd a label to an edge.,fglThe label in an edge.-fglList N available  s, i.e.  s that are not used in the ..fgl if the   is present in the ./fgl Insert a  into the .0fgl Insert a  into the .1fgl Remove a   from the .2fgl Remove an  from the .6NOTE: in the case of multiple edges, this will delete all such edges from the graph as there is no way to distinguish between them. If you need to delete only a single such edge, please use 3.3fgl Remove an  from the .VNOTE: in the case of multiple edges with the same label, this will only delete the first5 such edge. To delete all such edges, please use  delAllLedge.4fgl,Remove all edges equal to the one specified.5fglInsert multiple  s into the .6fglInsert multiple  s into the .7fglRemove multiple   s from the .8fglRemove multiple  s from the .9fglBuild a  from a list of s.2The list should be in the order such that earlier 1s depend upon later ones (i.e. as produced by # (:) []).:fglBuild a quasi-unlabeled .;fgl_Build a graph out of the contexts for which the predicate is satisfied by recursively calling .<fgl[Returns the subgraph only containing the labelled nodes which satisfy the given predicate.=fglRReturns the subgraph only containing the nodes which satisfy the given predicate.>fglYReturns the subgraph only containing the nodes whose labels satisfy the given predicate.?fgl3Returns the subgraph induced by the supplied nodes.@fglFind the context for the given  . Causes an error if the   is not present in the .AfglFind the label for a  .BfglFind the neighbors for a  .Cfgl4Find the labelled links coming into or going from a .Dfgl Find all  "s that have a link from the given  .Efgl Find all  s that link to to the given  .Ffgl Find all  !s that are linked from the given   and the label of each link.Gfgl Find all  s that link to the given   and the label of each link.HfglFind all outward-bound s for the given  .IfglFind all inward-bound s for the given  .Jfgl The outward-bound degree of the  .KfglThe inward-bound degree of the  .LfglThe degree of the  .MfglThe   in a .NfglThe label in a .OfglThe  from a .PfglAll  s linked to or from in a .Qfgl/All labelled links coming into or going from a .RfglAll  s linked to in a .SfglAll  s linked from in a .TfglAll  s linked from in a , and the label of the links.UfglAll  s linked from in a , and the label of the links.VfglAll outward-directed s in a .WfglAll inward-directed s in a .XfglThe outward degree of a .YfglThe inward degree of a .ZfglThe degree of a .[fgl5Checks if there is a directed edge between two nodes.\fgl8Checks if there is an undirected edge between two nodes.]fgl5Checks if there is a labelled edge between two nodes.^fglAChecks if there is an undirected labelled edge between two nodes.`fglbPretty-print the graph. Note that this loses a lot of information, such as edge inverses, etc.afgl!Pretty-print the graph to stdout.b  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab  !"#$%&'()*,+-./0123456789:;=<>?@ABCDEFGHIJKL[\]^_MNOPQRSUTVWXYZ`aSafenVlnmopqrstuvwxyz{|lnmopqrstuvwxyz{|SafeoSafesfgl>Find the first path in a tree that starts with the given node./Returns an empty list if there is no such path.fgl8Return the distance to the given node in the given tree.Returns $ if the given node is not reachable.Safesi Safe~ fgl#Reverse the direction of all edges.fgl^Make the graph undirected, i.e. for every edge from A to B, there exists an edge from B to A.fglRemove all labels.fgl Return all 's for which the given function returns .fglFilter based on edge property.fgl$Filter based on edge label property.fgl/ if the graph has any edges of the form (A, A).fglThe inverse of .fglDirected graph fold.fgl Flatten a ', returning the elements in post-order.fglFlatten multiple s in post-order.fgl Flatten a 6, returning the elements in pre-order. Equivalent to  in .fglFlatten multiple s in pre-order.fgldirection of foldfgldepth aggregationfglbreadth/level aggregation Safe@Afgl graph foldNone=>?@Afgl_filter list (of successors/predecessors) through a boolean ST array representing deleted marksfgl)Please note that this instance is unsafe.fgl)Please note that this instance is unsafe. None=>?@Afgl_filter list (of successors/predecessors) through a boolean ST array representing deleted marksfgl(Please not that this instance is unsafe. Safe fgl3Graph construction monad; handles passing both the  and the .fglCreate a new, empty mapping.fgl;Generate a mapping containing the nodes in the given graph.fgl^Generate a labelled node from the given label. Will return the same node for the same label.fgl5Generate a labelled node and throw away the modified .fgl Generate a  from the node labels.fglGenerates a list of s.fglConstruct a list of nodes.fgl6Construct a list of nodes and throw away the modified .fglGRun a construction; return the value of the computation, the modified , and the modified .fgl'Run a construction and only return the .fglMonadic node construction.## None7XK None@Afgl generate list of unlabeled nodesfglgenerate list of labeled nodesfgldenote unlabeled edgesfglempty (unlabeled) edge list3      !"#$%&'()*+,-./01233      !"#$&%'()*+,-/.0123 Safey4fgleFinds the articulation points for a connected undirected graph, by using the low numbers criteria:Ja) The root node is an articulation point iff it has two or more children.b) An non-root node v is an articulation point iff there exists at least one child w of v such that lowNumber(w) >= dfsNumber(v).44Safe ;<=>?@ABCDEF ><=;?@BACEDFSafeafglMany functions take a list of nodes to visit as an explicit argument. fixNodes is a convenience function that adds all the nodes present in a graph as that list.HfglfMost general DFS algorithm to create a list of results. The other list-returning functions such as I) are all defined in terms of this one. H d f vs =  . R d f vs IfglDepth-first search.Mfgl\Undirected depth-first search, obtained by following edges regardless of their direction.Ofgl?Reverse depth-first search, obtained by following predecessors.QfglWMost general DFS algorithm to create a forest of results, otherwise very similar to H/. The other forest-returning functions such as S) are all defined in terms of this one.Rfgl(Discard the graph part of the result of Q. +xdffWith d f vs g = fst (xdfWith d f vs g) SfglDirected depth-first forest.Wfgl\Undirected depth-first forest, obtained by following edges regardless of their direction.[fgl?Reverse depth-first forest, obtained by following predecessors._fgl"Collection of connected components`fglNumber of connected componentsafglIs the graph connected?fgl Flatten a  in reverse orderfgl!Flatten a forest in reverse orderbfgl 0http://en.wikipedia.org/wiki/Topological_sortingTopological sorting, i.e. a list of  ms so that if there's an edge between a source and a target node, the source appears earlier in the result.cfglb), returning only the labels of the nodes.dfgl+Collection of strongly connected componentsefgl4Collection of nodes reachable from a starting point.ffgl[The condensation of the given graph, i.e., the graph of its strongly connected components.Hfgl@Mapping from a node to its neighbours to be visited as well. R for example makes H? traverse the graph following the edge directions, while S means reversed directions.fglMapping from the  of a node to a result value.fglNodes to be visited. GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef GILSVJKTUHQRMNWZXY[^OP\]bcde_`afSafe gfglFinds the bi-connected components of an undirected connected graph. It first finds the articulation points of the graph. Then it disconnects the graph on each articulation point and computes the connected components.ggSafe‡hfglBreturn immediate dominators for each node of a graph, given a rootifglBreturn the set of dominators of the nodes of a graph, given a roothiihSafejfglECalculate the maximum independent node set of the specified graph.kfgl5The maximum independent node set along with its size.jkjkSafe'lmnlmnSafeofgl  i 0 For each edge a--->b this function returns edge b--->a . i Edges a<--->b are ignored j pfgl  i 0 For each edge a--->b insert into graph the edge a<---b . Then change the i (i,0,i) label of every edge from a---->b to a------->b Cwhere label (x,y,z)=(Max Capacity, Current flow, Residual capacity)qfgl/Given a successor or predecessor list for node u and given node v*, find the label corresponding to edge (u,v)d and update the flow and residual capacity of that edge's label. Then return the updated list.rfgl=Update flow and residual capacity along augmenting path from s to t in graph @G. For a path  [u,v,w,...] find the node u in GS and its successor and predecessor list, then update the corresponding edges (u,v) and L(v,u)@ on those lists by using the minimum residual capacity of the path.sfglCompute the flow from s to t, on a graph whose edges are labeled with 5(x,y,z)=(max capacity,current flow,residual capacity)" and all edges are of the form a<---->b. First compute the residual graph, that is, delete those edges whose residual capacity is zero. Then compute the shortest augmenting path from s to t, and finally update the flow and residual capacity along that path by using the minimum capacity of that path. Repeat this process until no shortest path from s to t exist.tfglHCompute the flow from s to t on a graph whose edges are labeled with x, which is the max capacity and where not all edges need to be of the form a<---->b. Return the flow as a graph whose edges are labeled with (x,y,z)=(max capacity,current flow,residual capacity) and all edges are of the form a<---->bufgl Compute the maximum flow from s to t on a graph whose edges are labeled with x, which is the max capacity and where not all edges need to be of the form a<---->b. Return the flow as a graph whose edges are labeled with (y,x) = (current flow, max capacity).vfgl"Compute the value of a maximumflowopqrstuvopqrstuvNonewxyzwyxzSafe@Afgl0encapsulates a simple recursion schema on graphsfgl2Monadic graph algorithms are defined in two steps: Cdefine the (possibly parameterized) graph transformer (e.g., dfsGT)=run the graph transformer (applied to arguments) (e.g., dfsM)fgl+depth-first search yielding number of nodesfgl&depth-first search yielding dfs forest##8Safe_fgl#Dijkstra's shortest path algorithm.The edge labels of type bB are the edge weights; negative edge weights are not supported.fglSTree of shortest paths from a certain node to the rest of the (reachable) nodes.Corresponds to o applied to a heap in which the only known node is the starting node, with a path of length 0 leading to it.The edge labels of type bB are the edge weights; negative edge weights are not supported.fgl6Length of the shortest path between two nodes, if any.Returns  if there is no path, and  pathlength otherwise.The edge labels of type bB are the edge weights; negative edge weights are not supported.fgl(Shortest path between two nodes, if any.Returns A if the destination is not reachable from the start node, and  path otherwise.The edge labels of type bB are the edge weights; negative edge weights are not supported.fgl.Initial heap of known paths and their lengths.fglStartfgl DestinationfglStartfgl DestinationllSafe-fgl)Representation of a shortest path forest.fgliProduce a shortest path forest (the roots of which are those nodes specified) from nodes in the graph to( one of the root nodes (if possible).fgliProduce a shortest path forest (the roots of which are those nodes specified) from nodes in the graph from( one of the root nodes (if possible).fgl<Return the nodes reachable to/from (depending on how the  was constructed) from the specified root node (if the specified node is not one of the root nodes of the shortest path forest, an empty list will be returned).fgliTry to construct a path to/from a specified node to one of the root nodes of the shortest path forest.fgl[Try to determine the nearest root node to the one specified in the shortest path forest.fglThe distance to the 2 (if there is one) in the shortest path forest.fgliTry to construct a path to/from a specified node to one of the root nodes of the shortest path forest.SafefglFinds the transitive closure of a directed graph. Given a graph G=(V,E), its transitive closure is the graph: G* = (V,E*) where E*={(i,j): i,j in V and there is a path from i to j in G}fglFinds the transitive, reflexive closure of a directed graph. Given a graph G=(V,E), its transitive closure is the graph: G* = (V,E*) where E*={(i,j): i,j in V and either i = j or there is a path from i to j in G}fglFinds the reflexive closure of a directed graph. Given a graph G=(V,E), its transitive closure is the graph: G* = (V,Er union E) where Er = {(i,i): i in V}Noneul4;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyzSafe7Safe;Nonefgl Version info%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`al4;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?%&                                         ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     "fgl-5.7.0.3-4FxLsYUY45q2W2SbVtZtgmData.Graph.Inductive.Graph"Data.Graph.Inductive.Internal.Heap#Data.Graph.Inductive.Internal.Queue&Data.Graph.Inductive.Internal.RootPath$Data.Graph.Inductive.Internal.ThreadData.Graph.Inductive.BasicData.Graph.Inductive.Monad"Data.Graph.Inductive.Monad.IOArray"Data.Graph.Inductive.Monad.STArrayData.Graph.Inductive.NodeMap!Data.Graph.Inductive.PatriciaTreeData.Graph.Inductive.Example#Data.Graph.Inductive.Query.ArtPointData.Graph.Inductive.Query.BFSData.Graph.Inductive.Query.DFSData.Graph.Inductive.Query.BCC%Data.Graph.Inductive.Query.Dominators Data.Graph.Inductive.Query.IndepData.Graph.Inductive.Query.MST"Data.Graph.Inductive.Query.MaxFlow#Data.Graph.Inductive.Query.MaxFlow2 Data.Graph.Inductive.Query.MonadData.Graph.Inductive.Query.SPData.Graph.Inductive.Query.GVD$Data.Graph.Inductive.Query.TransClosData.Graph.Inductive.TreeData.Graph.InductiveDataTreeData.Graph.Inductive.Query Paths_fglOrdGrunOrdGrDynGraph&GraphemptyisEmptymatchmkGraphlabNodesmatchAnynoNodes nodeRangelabEdgesUDecompUContextGDecompDecompMContextContextAdjUPathLPathLPunLPathPathUEdgeLEdgeEdgeUNodeLNodeNodeordersizeufoldgmapnmapemapnemapnodesedgestoEdgetoLEdge edgeLabelnewNodesgeleminsNodeinsEdgedelNodedelEdgedelLEdge delAllLEdgeinsNodesinsEdgesdelNodesdelEdgesbuildGrmkUGraph gfiltermap labnfilternfilter labfiltersubgraphcontextlab neighbors lneighborssucprelsuclpreoutinnoutdegindegdegnode'lab'labNode' neighbors' lneighbors'suc'pre'lsuc'lpre'out'inn'outdeg'indeg'deg'hasEdge hasNeighborhasLEdgehasNeighborAdjequalprettify prettyPrint $fOrdLPath $fEqLPath $fShowLPath$fEqGroupEdges $fOrdOrdGr $fEqOrdGr$fShowGroupEdges$fReadGroupEdges $fReadOrdGr $fShowOrdGrHeapEmpty prettyHeapprintPrettyHeapunitinsertmergemergeAllfindMin deleteMinsplitMinbuildtoListheapsort $fNFDataHeap$fEqHeap $fShowHeap $fReadHeapQueueMkQueuemkQueuequeuePut queuePutListqueueGet queueEmptyRTreeLRTreegetPathgetLPath getDistance getLPathNodesSplitMCollectThreadSplit threadList' threadList threadMaybe' threadMaybesplitPar splitParMgrevundirunlabgselefilterelfilterhasLoopisSimplegfold postorder postorderFpreorder preorderFGraphMemptyMisEmptyMmatchMmkGraphM labNodesM matchAnyMnoNodesM nodeRangeM labEdgesMufoldMnodesMedgesM newNodesMdelNodeM delNodesM mkUGraphMcontextMlabMUSGrContext'GraphRepSGrdefaultGraphSizeemptyN removeDel $fGraphMIOSGr$fShowIO $fShowSGr $fGraphMSTSGrNodeMapMNodeMapnew fromGraphmkNodemkNode_mkEdgemkEdgesmkNodesmkNodes_ insMapNode insMapNode_ insMapEdge delMapNode delMapEdge insMapNodes insMapNodes_ insMapEdges delMapNodes delMapEdges mkMapGraphrunrun_mkNodeMmkNodesMmkEdgeMmkEdgesM insMapNodeM insMapEdgeM delMapNodeM delMapEdgeM insMapNodesM insMapEdgesM delMapNodesM delMapEdgesM$fNFDataNodeMap $fEqNodeMap $fShowNodeMap $fReadNodeMapUGrGr $fBifunctorGr $fNFDataGr $fDynGraphGr $fGraphGr$fReadGr$fShowGr$fEqGr $fGenericGr$fEqFromListCounting$fShowFromListCounting$fReadFromListCounting genUNodes genLNodes labUEdgesnoEdgesabcee3loopababbcyc3dag3dag4d1d3g3g3ba'b'c'e'e3'loop'ab'abb'dag3'dag4'd1'd3'ucyclestarucycleMstarMclr479clr486clr489clr508clr528clr595gr1kin248vorclr479'clr486'clr489'clr508'clr528'kin248'vor'ap $fEqDFSTree $fShowDFSTree $fReadDFSTree $fEqLOWTree $fShowLOWTree $fReadLOWTreebfsnWithbfsnbfsWithbfslevellevelnbfenbfebftesplbftlespCFunxdfsWithdfsdfsWithdfsWith'dfs'udfsudfs'rdfsrdfs'xdfWithxdffWithdffdffWithdffWith'dff'udffudffWith udffWith'udff'rdffrdffWith rdffWith'rdff' components noComponents isConnectedtopsorttopsort'scc reachable condensationbcciDomdomindep indepSizemsTreeAtmsTreemsPath getRevEdges augmentGraph updAdjList updateFlowmfmgmf maxFlowgraphmaxFlowNetworkekFusedekSimpleekList $fEqDirection$fOrdDirection$fShowDirection$fReadDirectionGTMGTmapFstmapSnd><orPapplyapply' applyWith applyWith'runGTcondMGT'recMGT'condMGTrecMGTgetNode getContext getNodes'getNodessucGTsucMgraphRec graphRec' graphUFold graphNodesM0 graphNodesM graphNodes graphFilterM graphFilterdfsGTdfsMdfsM'dffMgraphDff graphDff' $fMonadGT$fApplicativeGT $fFunctorGTdijkstraspTreespLengthspVoronoigvdIngvdOut voronoiSet nearestNode nearestDist nearestPathtctrcrcversionghc-prim GHC.TypesTruefindPbase GHC.MaybeNothingcontainers-0.6.0.1 Data.TreeflattenfixNodes postflatten postflattenFJust maybePath getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName