In this program, the GameField class represents a 2D tile-based gamefield. Tiles have a common interface named Tile and there are a couple of concrete classes implementing the Tile interface. It also has Tile[][], a two-dimensional array storing tiles of different types enumerated in TileType and fill methods that accept coordinates and the tile type and fill the array.
Your task is to complete the fill method. Use the Flyweight pattern for that purpose and make sure that only a single instance of each concrete Tile implementation is created.