public static void main(String[] args) {
		Map<Integer,Game> knownGames = new HashMap<Integer,Game>();
		addGames(knownGames, getStartingGames()); 
		System.out.println("Number of starting boards: " + knownGames.size());
		
		for(int iteration=0; iteration<20; iteration++) {
			System.out.println("Iteration " + iteration + " with " + knownGames.size() + " games");
			Map<Integer,Game> nextRound = new HashMap<Integer,Game>();
			for(Game game: knownGames.values()) {
				//System.out.println("\t" + game.initialPosition + " (" + game.pathCount + " paths) -> " + game.board.toString() + " via " + game.moves.toString());
				addGames(nextRound, game.getNextGames());
			}
			if(nextRound.size() == 0) {
				break;
			}
			knownGames = nextRound;
		}
		
		// Print out the results
		System.out.println("Number of final games: " + knownGames.size());
		List<Game> gameList = new ArrayList<Game>();
		gameList.addAll(knownGames.values());
		Collections.sort(gameList, new Comparator<Game>() {
			public int compare(Game g1, Game g2) {
				if(g1.initialPosition < g2.initialPosition) return -1;
				if(g1.initialPosition > g2.initialPosition) return 1;
				return 0;
			}
		});
		if(gameList.size() < 1000) {
			for(Game game : gameList) {
				System.out.println("\t" + game.initialPosition + " (" + game.pathCount + " paths) -> " + game.board.toString() + " via " + game.moves.toString());
			}
		} else {
			System.out.println("\tcould not print more than 1000 games");
		}
	}