let iosh_combine iosh1 iosh2 =
  let iosh' = IH.copy iosh1 in
  IH.iter (fun id ios1 ->
    try let ios2 = IH.find iosh2 id in
    let newset = IOS.union ios1 ios2 in
    IH.replace iosh' id newset;
    with Not_found ->
      let newset = IOS.add None ios1 in
      IH.replace iosh' id newset) iosh1;
  IH.iter (fun id ios2 ->
    try ignore(IH.find iosh1 id)
    with Not_found -> begin
    (*if not(IH.mem iosh1 id) then*)
      let newset = IOS.add None ios2 in
      IH.add iosh' id newset end) iosh2;
  iosh'