@Override
	public Solution search(Puzzle puzzle) {
		Node startNode = new Node(puzzle.getInitialState(), null, null);
		int nextCostBound = heuristic.h(startNode);
		Solution result = new Solution(null, 0);
		while (result.getN() == null) {
			result = depthFirstSearch(startNode, puzzle, nextCostBound);
			if(result.getN() != null && puzzle.getGoalTest().isGoalState((result.getN().getState())))
				return result;
			nextCostBound += 2;
		}
		return new Solution(null, 0);
	}