dfs(Move(), state, state.minMovesLeft());
dfs(Move());
deque<Move> IDAStar(int maxDist) {    DEBUG0("IDAStar" << maxDist);    ++Statistics::statesGenerated;    state = State(Problem::startPositions());    solution.clear();    if (state.minMovesLeft() > maxDist)	return solution;	// saves memory allocation and freeing#ifdef DO_CACHING    if (Problem::goalNr != cacheGoalNr) {	DEBUG1("cache of wrong goal nr. Clearing.");	cacheGoalNr = Problem::goalNr;	cachedStates.clear(MAX_STATES, LOAD_FACTOR);#ifdef DO_PREHEATING	if (maxDist > 0) {	    DEBUG1("Pre-heating cache.");	    for (maxMoves = 0; maxMoves < maxDist; ++maxMoves) {		DEBUG1("Pre-heating with maxDist = " << maxMoves);		dfs(Move(), state, state.minMovesLeft());		assert(solution.empty());		for (HashTable<IDAStarCacheState>::Iterator it = cachedStates.begin();		    it != cachedStates.end(); ++it)		    ++((*it).minMovesFromStart); // to force re-expansion	    }	    DEBUG1("Pre-heated cache.");	}#endif    } else {	for (HashTable<IDAStarCacheState>::Iterator it = cachedStates.begin();	     it != cachedStates.end(); ++it)	    ++((*it).minMovesFromStart); // to force re-expansion    }#endif#ifdef DO_PARTIAL    stateBits.init(MEMORY * 8);#endif    maxMoves = maxDist;    for (int i = 0; i < NUM_ATOMS; ++i)	for (int j = 0; j < 4; ++j)	    mayMove[i][j] = true;    Statistics::timer.start();    dfs(Move());    Statistics::timer.stop();    return solution;}