This homework looks very brief, but is probably a fair amount of work. We will discuss in class before starting to work on this. Some groups have good programmers in them. Make sure that they do not simply implement everything and others in the group are just watching. Tricks to avoid this (use all!): 1) when working together, have the students who are less comfortable with the programming do the typing; 2) divide tasks and then return to the group to discuss each other's progress; 3) do not quickly implement everything before you meet as a group, but work together. Refactoring is the technical term of rewriting code that already works, to improve readability and maintainability of the code. For example, sometimes we might split a function into multiple, easier to read functions, that have very clear objectives. 1a. Create a Location class, where the constructor creates a random location. 1b. Implement a distance() function in the Location class that takes another location as input and returns the distance. 2. Refactor the code from Lab 5 using an object-oriented design and dividing the code into multiple files: 2a. Create a Voter class. 2b. Create a Party class. 2c. Implement the vote() method in the Voter class. 2d. Implement a count_votes() method in the Party class. 3. Create a Simulation class that includes a list of Parties and Voters. 3a. Write a method that creates a random list of parties and a random list of voters. 3b. Write a method that has all voters vote once. 3c. Write a method that prints for each party the vote count. 4. Test all by running the three functions in sequence.