1. Classification 1.a. Make a list of the most common geometric (2D) shapes. 1.b. Determine the relations between the shapes. That is: decide for all shapes X and Y whether X is always a Y. Note: all bugs are insects, but not all insects are bugs. 1.c. Determine whether a shape can be represented, and if so, devise a representation. 1.d. Suppose we use the shapes in programs. List as many methods as you can that we may want to use about them. 2. Implementation 2.a. Make constructors for the classes that can be represented. Decide what parameters you have to use; you can make several constructors if needed. 2.b. Implement a method that reads the shape from text received through a Scanner. 2.c. Make a constructor that gets a Scanner, and reads the shape from it. 2.d. Implement the methods that you decided to have in 1.d. 2.e. Implement the following method overrides where necessary: a. toString b. clone c. equals (and hashCode) d. compareTo The method should sort using the size of the shape. 3. We will represent shapes, and also points and lines; all of them will get an associated, unique index. Receive a text using a Scanner that contains a sequence of simple instructions like the following. Make a window and draw the shapes that are created; if you read a request (e.g. about the area of a shape), print its result to the standard output. create 1 triangle 100 100 400 100 100 500 create 2 line 200 200 400 200 create 3 point 100 200 isOn 3 2 area 1 resize 1 1.5