private void generateEightPuzzleDB(final long boardConfig) {
		breadthFirstSearch(boardConfig, null);
		final PrimitiveHashMap costMap_8_puzzle = new PrimitiveHashMap();
		System.err.println("Total states visited: " + this.tempMap.size());
		System.err.print("Removing duplicates...");
		final Set<Entry> entries = this.tempMap.entrySet();
		final Iterator<Entry> it = entries.iterator();
		while (it.hasNext()) {
			final Entry entry = it.next();
			final long config = entry.getKey();
			final byte movesRequired = entry.getValue();
			final byte moves = costMap_8_puzzle.get(config);
			if (moves == PrimitiveHashMap.KEY_NOT_FOUND || movesRequired < moves) {
				costMap_8_puzzle.put(config, movesRequired);
			}
			it.remove();
		}
		System.err.println("done");
		final int numElements = costMap_8_puzzle.size();
		this.stateToCostEntries_8_puzzle = new LinkedList<Entry>(costMap_8_puzzle.entrySet());
		System.err.print("Sorting entries...");
		Collections.sort(this.stateToCostEntries_8_puzzle, new Comparator<Entry>() {
			@Override
			public int compare(final Entry e1, final Entry e2) {
				return e1.getValue() - e2.getValue();
			}
		});
		System.err.println("done");
		System.err.println("States in subset: " + numElements);
	}