}
public static class TravelingTournamentInputBuilder extends TxtInputBuilder {
public Solution readSolution() throws IOException {
TravelingTournament travelingTournament = new TravelingTournament();
travelingTournament.setId(0L);
int n = readN();
readTeamList(travelingTournament, n);
createDayList(travelingTournament, n);
List<List<Integer>> outerDistanceList = readOuterDistanceList(travelingTournament);
// TODO setting the distances should be a separate method
createMatchListAndSetDistancesInTeamList(travelingTournament, outerDistanceList);
initializeMatchDays(travelingTournament);
BigInteger possibleSolutionSize = factorial(2 * (n - 1)).pow(n / 2);
logger.info("TravelingTournament {} has {} days, {} teams and {} matches with a search space of {}.",
getInputId(),
travelingTournament.getDayList().size(),
travelingTournament.getTeamList().size(),
travelingTournament.getMatchList().size(),
getFlooredPossibleSolutionSize(possibleSolutionSize));
return travelingTournament;
}