public Solution readSolution() throws IOException {
   patientAdmissionSchedule = new PatientAdmissionSchedule();
   patientAdmissionSchedule.setId(0L);
   readSizes();
   readEmptyLine();
   readEmptyLine();
   readSpecialismList();
   readEmptyLine();
   readDepartmentListAndDepartmentSpecialismList();
   readEmptyLine();
   readEquipmentList();
   readEmptyLine();
   readRoomListAndRoomSpecialismListAndRoomEquipmentList();
   readEmptyLine();
   readBedList();
   readEmptyLine();
   generateNightList();
   readPatientListAndAdmissionPartListAndRequiredPatientEquipmentListAndPreferredPatientEquipmentList();
   readEmptyLine();
   readConstantLine("END.");
   createBedDesignationList();
   // TODO not all nights are planned, only the "planning horizon" nights are planned
   BigInteger possibleSolutionSize =
       BigInteger.valueOf(patientAdmissionSchedule.getBedList().size())
           .pow(patientAdmissionSchedule.getAdmissionPartList().size());
   String flooredPossibleSolutionSize = "10^" + (possibleSolutionSize.toString().length() - 1);
   logger.info(
       "PatientAdmissionSchedule {} has {} specialisms, {} equipments, {} departments, {} rooms, "
           + "{} beds, {} nights, {} patients and {} admissions with a search space of {}.",
       getInputId(),
       patientAdmissionSchedule.getSpecialismList().size(),
       patientAdmissionSchedule.getEquipmentList().size(),
       patientAdmissionSchedule.getDepartmentList().size(),
       patientAdmissionSchedule.getRoomList().size(),
       patientAdmissionSchedule.getBedList().size(),
       patientAdmissionSchedule.getNightList().size(),
       patientAdmissionSchedule.getPatientList().size(),
       patientAdmissionSchedule.getAdmissionPartList().size(),
       flooredPossibleSolutionSize);
   return patientAdmissionSchedule;
 }