private ArrayList<Meld> getRelatedSets(ArrayList<Tile> originalTiles, ArrayList<Meld> board){
		ArrayList<Meld> adjacentSets;
		ArrayList<Tile> adjacentTiles;
		Integer[] numAdjacent;
		int indexOfMostMatches, maximumMatches;
		boolean addedTiles;
		
		adjacentSets = new ArrayList<Meld>();
		adjacentTiles = new ArrayList<Tile>(originalTiles);
		addedTiles = true;
		
		while(addedTiles && adjacentTiles.size() < SUBSET_SIZE){
			addedTiles = false;
			numAdjacent = new Integer[board.size()];
			for(int i=0; i<board.size(); i++)
				numAdjacent[i] = new Integer(0);
			
			
			for(int i=0; i<adjacentTiles.size(); i++){ 
				for(int j=0; j<board.size(); j++){			
					numAdjacent[j] = numAdjacent[j] + board.get(j).getNumAdjacent(adjacentTiles.get(i));
				}
			}
			
			// find the set with the most matches
			maximumMatches = 0;
			indexOfMostMatches = -1;
			
			for(int j=0; j<board.size(); j++){
				if(numAdjacent[j]  > maximumMatches){
					maximumMatches = numAdjacent[j];
					indexOfMostMatches = j;
				}
			}
			
			// add all those tiles to the number of adjacent tiles
			if(maximumMatches > 0){
				if(adjacentTiles.size() + board.get(indexOfMostMatches).getNumTiles() > SUBSET_SIZE)
					break;
				
				adjacentTiles.addAll(board.get(indexOfMostMatches).getTiles());
				adjacentSets.add(board.get(indexOfMostMatches));
				
				board.remove(indexOfMostMatches);
				addedTiles = true;
			}
		}
		
		return adjacentSets;
	}