public ArrayList<Meld> getBruteForceMove(Hand hand, int playerNum) throws Exception{
		ArrayList<Meld> melds;
		ArrayList<Tile> originalTiles, usedTiles;
		Hand allTiles;
		
		// add all tiles on the board and in your hand to one set
		originalTiles = new ArrayList<Tile>();
		originalTiles.addAll(hand.getTiles());
		for(int i=0; i<board.size(); i++)
			originalTiles.addAll(board.get(i).getTiles());
		
		// generate all possible runs + groups
		allTiles = new Hand(originalTiles);
		melds = allTiles.getGroups();
		melds.addAll(allTiles.getRuns());
		
		// get the mutually exclusive subset with the largest score
		melds = allTiles.findLargestSubset(new ArrayList<Tile>(allTiles.getTiles()), new ArrayList<Tile>(), melds);

		// Create a list of tiles from the original board
		originalTiles = new ArrayList<Tile>();
		for(int i=0; i<board.size(); i++)
			originalTiles.addAll(board.get(i).getTiles());
		
		// make a list of all tiles used in the new melds
		usedTiles = new ArrayList<Tile>();
		for(Set set : melds)
			usedTiles.addAll(set.getTiles());
		
		// remove tiles from the original board from the tiles that you used
		for(Tile tile : originalTiles){
			if(usedTiles.contains(tile))
				usedTiles.remove(tile);
		}
		
		// no tiles were moved from your hand to the board
		if(usedTiles.size() == 0)
			return null;
		
		// remove the tiles that you played from your hand
		for(Tile tile : usedTiles){
			hand.removeTile(tile);
			tilesInHand[playerNum]--;
		}
		
		return melds;
	}