Exception handling, generic programming In this assignment, you are required to create a library utility for assigning transport vehicles to a group of travellers. 1) Create an interface called Vehicle to denote vehicles. This interface should have a method to return the maximum number of travellers that can be accommodated in the vehicle. 2) Create an interface called Traveller to denote the travellers. This interface should have a method named getMaxCoTravellers to return the maximum number of other travellers that this traveller is willing to travel with. This interface should also have another method called canCoTravel, that takes as parameter another Traveller object and returns a boolean value indicating whether or not the two travelers can travel in the same vehicle. For example, a smoker and a non-smoker cannot travel in the same vehicle. Since we are implementing a generic utility library, users of our library can try to check cotravelability of bizarre pair of travellers. 3) Create an exception called IncomparableTravellersException. The canCoTravel method in the Traveler interface should advertise that it can throw IncomparableTravellersException. For example, if carPassenger and cyclist are both instances of classes CarPassenger and Cyclist respectively which implement the Traveler interface, then carPassenger.canCoTravel(cyclist) should throw IncomparableTravellersException. 4) Create a class TravelUtils with a static method named getTypesCount with: Input: java.util.Collection which gives a collection of vehicles. Output: int The output from this method should be the number of types of vehicles in the given collection. (Two vehicles are of the same type, if they have the same number of maximum passengers.) 5) The TravelUtils class should have another method named getVehiclesClassCount with: Input: java.util.Collection. Output: int It should also be able to throw IncomparableTravellersException. Given a collection of Travellers, define an equivalence relation on it by setting 2 travellers are equivalent iff they can travel in the same vehicle as per the implementation of the canCoTravel method. The return value should be the number of equivalence classes of this relation. 6) Create a class called Sailor implementing the Traveller interface. Every sailor should have private fields: - name(String), storing the name of the sailor. - id(String), storing a unique ID number of the sailor. - Accessors and Mutators. 7) Create subclasses PremiumSailor and CheapSailor. A PremiumSailor can only travel with (at most two other) PremiumSailors. A CheapSailor can only travel with (at most five other) CheapSailors. All sailor classes should have constructors taking two Strings as parameters, setting them to the name, sailor ID. They should also have a constructor that doesn't take any parameter and assigns null to the field storing name, ID. 8) Create a class called Ship, implementing the Vehicle interface. It should have the following fields: - name(String), denoting the name of the vessel. - capacity(int), denoting the maximum passenger capacity. It should have a constructor that takes an String, int as parameters and it denotes the name and number of sailors that can be accommodated respectively. Your code should be compilable with the attached Assignment2.java class. Create a .zip archive containing the following files: Vehicle.java, Traveller.java, IncomparableTravellersException.java, TravelUtils.java, Sailor.java, PremiumSailor.java, CheapSailor.java and Ship.java. These eight files should be put into a folder whose name should be your first name and the folder should be zipped and uploaded to moodle.