let rearrange_treeCut tree gr edge_id cycle=
match gr with
Right a -> (tree,[])
| Left graph ->
let edge = findedge edge_id tree
in let _ = report2 "kustutasin serva"
in let (c,t,p) = edge.edge
in let target_gnode = DG.findnode t graph
in let target_node = findnode t tree
in let source_gnode = DG.findnode c.sourceid graph
in let source_node = findnode c.sourceid tree
in let tr1 = {tree with treeNodes=
IdtMap.add c.sourceid {source_node with node = source_gnode; children = (List.filter (fun x -> x!=t) source_node.children)}
(IdtMap.remove c.sourceid tree.treeNodes)}
in let tr = {tr1 with treeNodes=IdtMap.add t {target_node with node = target_gnode} (IdtMap.remove t tr1.treeNodes);
treeEdges = IdtMap.remove c.nameforudg tr1.treeEdges}
in let gr_node_inp = (DG.nodefoldedges (fun y a -> y::a) target_gnode [])
in let new_inp = List.filter (fun (co,_,_) -> not (hasnode co.sourceid tr)) gr_node_inp
in let (nc,nt,np) = List.hd new_inp
in let error_node = DG.findnode nc.sourceid graph
in let tree2 = ({treeEdges = IdtMap.add nc.nameforudg {edge=(nc,nt.id,np); edgeway = Cross; used = true} tr.treeEdges;
treeNodes = IdtMap.add nc.sourceid {node = error_node; number = NodeNumber.get (); allDone = true; children = [t]} tr.treeNodes;
starting_places = List.concat [tr.starting_places;[nc.sourceid]]})
in (tree2,[])