else {
if (!(precomputeProbs && deleteCountsWhenPrecomputingProbs)) {
  protected void cleanup() {    int numHistoriesRemoved = 0;    int numTransitionsRemoved = 0;    Time time = null;    if (verbose)      time = new Time();    if (precomputeProbs) {      int lastLevel = numLevels - 1;      for (int level = 0; level < numLevels; level++) {	Iterator it = precomputedProbs[level].keySet().iterator();	while (it.hasNext()) {	  if (structure.removeTransition(level, (Transition)it.next())) {	    it.remove();	    numTransitionsRemoved++;	  }	}	if (level < lastLevel) {	  it = precomputedLambdas[level].keySet().iterator();	  while (it.hasNext()) {	    if (structure.removeHistory(level, (Event)it.next())) {	      it.remove();	      numHistoriesRemoved++;	    }	  }	}      }    }    else {      for (int level = 0; level < numLevels; level++) {	BiCountsTable histories = counts[level].history();	Iterator it = histories.keySet().iterator();	while (it.hasNext())	  if (structure.removeHistory(level, (Event)it.next())) {	    it.remove();	    numHistoriesRemoved++;	  }	CountsTable transitions = counts[level].transition();	it = transitions.keySet().iterator();	while (it.hasNext())	  if (structure.removeTransition(level, (Transition)it.next())) {	    it.remove();	    numTransitionsRemoved++;	  }      }    }    if (verbose)      System.err.println("Cleaned up in " + time + "; removed " +			 numHistoriesRemoved + " histories and " +			 numTransitionsRemoved + " transitions.");  }