we want a java code for the following coding challenge: a road is divided into segments numbered from 1 to n ‐ within each segment, at any moment there can be at most one car ‐ a car can change segments at every full second ‐ a segment can be entered only when during the past second there was no car in it ‐ if it is not possible for a car to proceed it waits ‐ all segment changes occur simultanously ‐ each car has to perform a trip which consists of entering the road at a given start segment, subsequently moving from one segment to the next, and leaving the road at a given end segment ‐ the arrival time of a car is when it finishes its trip ‐ all trips within a test case will have different start segments Calculate the arrival times of a number of cars, which perform trips on one simple road. - all trips start at time=1 Input: Note: lines are separated by newline (\n) number road segments (n) number of cars (m) startsegment,endsegment for car 1 … startsegment,endsegment for car m Example input 100 5 3,99 40,75 20,99 28,76 1,100 Example output 98,37,81,50,101 1 < n < 1000 1 < m < 1000 1 <= startsegment < endsegment <= n Result: arrival times of the cars, separated by comma, in the order of the input Lets assume we already have the following data structures: package at.salento; public class Car { private int startSegment; private int endSegment; private int arrivalTime; private int order; private int earliestStartTime; // introduced in level 2 private int delay; private boolean entered = false; private boolean toRemove = false; // not used at the moment public Car() { this.startSegment = 0; this.endSegment = 0; this.arrivalTime = 0; this.order = 0; this.delay = 0; } public Car(int start, int end, int duraction) { this.startSegment = start; this.endSegment = end; this.arrivalTime = duraction; this.order = 0; this.delay = 0; } public Car(int start, int end, int duration, int order) { this.startSegment = start; this.endSegment = end; this.arrivalTime = duration; this.order = order; this.delay = 0; } public int getStartSegment() { return startSegment; } public void setStartSegment(int startSegment) { this.startSegment = startSegment; } public int getEndSegment() { return endSegment; } public void setEndSegment(int endSegment) { this.endSegment = endSegment; } public int getOrder() { return order; } public void setOrder(int order) { this.order = order; } public int getArrivalTime() { return arrivalTime; } public void setArrivalTime(int arrivalTime) { this.arrivalTime = arrivalTime; } public void increaseArrivalTime() { this.arrivalTime++; } public int getDelay() { return delay; } public void increaseDelay() { this.delay++; } public void setDelay(int delay) { this.delay = delay; } public int getTotalArrivalTime() { return this.arrivalTime + this.delay; } public boolean isEntered() { return entered; } public void setEntered(boolean entered) { this.entered = entered; } public boolean isToRemove() { return toRemove; } public void setToRemove(boolean toRemove) { this.toRemove = toRemove; } public int getEarliestStartTime() { return earliestStartTime; } public void setEarliestStartTime(int earliestStartTime) { this.earliestStartTime = earliestStartTime; } @Override public String toString() { String viz = ""; for (int i = 0; i< startSegment; i++) viz += " "; viz += "|"; for (int i = startSegment +1; i < endSegment; i++) viz += "-"; viz += "|"; // for (int i=) return String.format(" Car(start: %02d", startSegment) + String.format(", end: %02d", endSegment) + String.format(", arr.t.: %02d", arrivalTime) + String.format(", delay: %02d", delay) + String.format(", est: %02d", earliestStartTime) + String.format(", tot.arr.t: %02d", getTotalArrivalTime()) + String.format(", order: %02d", order) + ") " + "\n"; } } and we have filled an private ArrayList cars; in a class Level1ComputationCGT. we now need a method that performs the required calculation