cerr << si.id() << " and " << sj.id() << " interfering" << endl;
std::cerr << si.id() << " and " << sj.id() << " interfering" << std::endl;
disable_interference(const vector<const Step*>& ordered_steps,		     const LinkChain* links,		     const BinaryOrderings& orderings,		     const Bindings& bindings) {  const BinaryOrderings* new_orderings = &orderings;  size_t n = ordered_steps.size();  for (size_t i = 0; i < n; i++) {    for (size_t j = i + 1; j < n; j++) {      const Step& si = *ordered_steps[i];      const Step& sj = *ordered_steps[j];      if (new_orderings->possibly_concurrent(si.id(), STEP_START,					     sj.id(), STEP_START)	  || new_orderings->possibly_concurrent(si.id(), STEP_START,						sj.id(), STEP_END)	  || new_orderings->possibly_concurrent(si.id(), STEP_END,						sj.id(), STEP_START)	  || new_orderings->possibly_concurrent(si.id(), STEP_END,						sj.id(), STEP_END)) {	if (verbosity > 1) {	  cerr << si.id() << " and " << sj.id() << " possibly concurrent"	       << endl;	}	bool interference = false;	for (const LinkChain* lc = links;	     lc != NULL && !interference; lc = lc->tail) {	  const Link& l = lc->head;	  StepTime lt = end_time(l.condition());	  if (l.to_id() == sj.id()) {	    // is effect of si interfering with link condition?	    const EffectList& effects = si.action().effects();	    for (EffectListIter ei = effects.begin();		 ei != effects.end() && !interference; ei++) {	      const Effect e = **ei;	      if (e.link_condition().contradiction()) {		// effect could interfere with condition		StepTime et = end_time(e);		if (new_orderings->possibly_concurrent(si.id(), et,						       l.to_id(), lt)) {		  if (typeid(l.condition()) == typeid(Negation)) {		    const AtomList& adds = e.add_list();		    for (AtomListIter fi = adds.begin();			 fi != adds.end() && !interference; fi++) {		      const Atom& atom = **fi;		      if (bindings.affects(atom, si.id(),					   l.condition(), l.to_id())) {			interference = true;		      }		    }		  } else {		    const NegationList& dels = e.del_list();		    for (NegationListIter fi = dels.begin();			 fi != dels.end() && !interference; fi++) {		      const Negation& neg = **fi;		      if (bindings.affects(neg, si.id(),					   l.condition(), l.to_id())) {			interference = true;		      }		    }		  }		}	      }	    }	  } else if (l.to_id() == si.id()) {	    // is effect of sj interfering with link condition?	    const EffectList& effects = sj.action().effects();	    for (EffectListIter ei = effects.begin();		 ei != effects.end() && !interference; ei++) {	      const Effect e = **ei;	      if (e.link_condition().contradiction()) {		// effect could interfere with condition		StepTime et = end_time(e);		if (new_orderings->possibly_concurrent(sj.id(), et,						       l.to_id(), lt)) {		  if (typeid(l.condition()) == typeid(Negation)) {		    const AtomList& adds = e.add_list();		    for (AtomListIter fi = adds.begin();			 fi != adds.end() && !interference; fi++) {		      const Atom& atom = **fi;		      if (bindings.affects(atom, sj.id(),					   l.condition(), l.to_id())) {			interference = true;		      }		    }		  } else {		    const NegationList& dels = e.del_list();		    for (NegationListIter fi = dels.begin();			 fi != dels.end() && !interference; fi++) {		      const Negation& neg = **fi;		      if (bindings.affects(neg, sj.id(),					   l.condition(), l.to_id())) {			interference = true;		      }		    }		  }		}	      }	    }	  }	}	if (interference) {	  if (verbosity > 1) {	    cerr << si.id() << " and " << sj.id() << " interfering" << endl;	  }	  new_orderings = new_orderings->refine(Ordering(si.id(), STEP_START,							 sj.id(), STEP_START,							 Reason::DUMMY));	}      }    }  }  return *new_orderings;}