private void searchPossibleGamesImprovements(List<ArrayList<Integer>> list, ArrayList<Integer> idxList){
		//
		List<List<Game>> oldSolution = sol.deepCopy();
		String change = "";
		//
		iterationStep++;
		//
		for(int ind=0; ind<idxList.size(); ind++){
				ArrayList<Integer> gamesIdx = list.get(idxList.get(ind));
				int city = gamesIdx.get(0);
				int round = gamesIdx.get(1);
				int round2 = gamesIdx.get(2);
				Game game      = sol.getGameOfCityInRound(city, round);
				Game otherGame = sol.getGameOfCityInRound(city, round2);
				int idxGame  = sol.getSolution().get(round).indexOf(game);
				int idxOtherGame = sol.getSolution().get(round2).indexOf(otherGame);
				sol.getSolution().get(round).set(idxGame, otherGame);
				sol.getSolution().get(round2).set(idxOtherGame, game);
				change = change+" ("+game+" to "+otherGame+") ";
		}
		//
		int costs = sol.getCumulativeCost();
		boolean badConstraint = sol.checkConstraint();
		//
		change = change+": "+costs;
		//
		if(orgSolutionFalse && !badConstraint){
			System.out.println("repair .... NEW SOLUTION (games exchange): "+costs);
			System.out.println(sol);
			orgSolutionFalse = (sol.checkConstraint());
			if(Util.protocolBoolean){
				Util.protocol += "repair .... NEW SOLUTION (games exchange): "+costs+"\n";
				Util.protocol += sol+"\n";
			}
		}
		else if((currentCosts<=costs) || badConstraint){
			//
		}
		else{
			solPossible.add(sol.deepCopy());
			solPossibleChoice.add(change);
		}
		////////////////////////////////////////////////////////////////////////////////
		for(int neighCnt=0; neighCnt<3; neighCnt++){
			bestNeighborhoodRounds(neighCnt);
		}
		//
		sol.setSolution(oldSolution);
		////////////////////////////////////////////////////////////////////////////////
		//
		
	}