public static void displayStats(final byte[] initState) {
		final int numOfTiles = initState.length;
		System.out.println();
		System.out.println("Puzzle type:          " + (numOfTiles - 1) + "-puzzle");
		System.out.print("Initial permutation:  ");
		System.out.println(byteArrayToString(initState));
		System.out.print("Goal state:           ");
		for (int i = 0; i < numOfTiles; ++i) {
			if (i != 0) {
				System.out.print(",");
			}
			System.out.print((byte) ((PuzzleConfiguration.getGoalState() >> (i << 2)) & 0xF));
		}
		System.out.println();
		System.out.println("Elapsed time:         "
				+ DEC_FORMATTER.format(Algorithm.getRunningTimeInSeconds()) + " s");
		System.out
				.println("Paths visited:        " + INT_FORMATTER.format(Algorithm.numberVisited));
		System.out.println("States explored:      "
				+ INT_FORMATTER.format(Algorithm.numberExpanded));
		final int numOfMoves = Algorithm.shortestPath.length();
		if (numOfMoves == 1) {
			System.out.println("Shortest path:        " + numOfMoves + " move");
		} else {
			System.out.println("Shortest path:        " + numOfMoves + " moves");
		}
		final String[] directions = getDirections(initState);
		for (int i = 0; i < directions.length; ++i) {
			System.out.println(directions[i]);
		}
	}