let upper_mux_edge cycle tree =
    let back_in = List.hd (List.rev cycle)
    in
    let rec upper cyc=
      match cyc with
        x::t::tail ->if is_MUX x tree 
        then let filterid = (edgefilter tree (fun _ mx -> let (cx,tx,_)=mx.edge in tx ==t && cx.sourceid == x && mx.edgeway == Normal))
         in (List.hd (List.map (fun nx -> let (cx,_,_) = nx.edge in cx.nameforudg) filterid))  
        else upper (t::tail)
      | x::tail -> if is_MUX x tree 
        then let filterid = edgefilter tree (fun _ mx -> let (cx,tx,_)=mx.edge in tx ==back_in && cx.sourceid == x && mx.edgeway == Backward)
          in (List.hd (List.map (fun nx -> let (cx,_,_) = nx.edge in cx.nameforudg) filterid))  
        else upper tail
      | _ -> NewName.invalid_id (*siia ei tohi sattuda*)
    in
    upper (List.tl (List.rev cycle))