public void prune() {
    while(size() > maxBufferSize) {
      boolean cont = false;
      for (Integer key : stateMap.keySet()) {
//      for (Integer key : stateMap.descendingKeySet()) {
        if (stateMap.get(key).size() > MAX_SUBMAP_SIZE) {
          stateMap.get(key).remove(stateMap.get(key).size()-1);
          cont = true;
          break;
        }
      }
      if (cont) continue;
      Integer maxStepCount = stateMap.lastKey();
      stateMap.get(maxStepCount).remove(stateMap.get(maxStepCount).size()-1);
      if(stateMap.get(maxStepCount).size() == 0)
        stateMap.remove(maxStepCount);
    }
  }