stacks listing continued resets the maze by removing all "pathand "triedtokens def resetself )prints text-based representation of the maze def drawself )returns true if the given cell position is valid move def _validmoveselfrowcol )return row > and row self numrows(and col > and col self numcols(and self _mazecells[rowcolis none helper method to determine if the exit was found def _exitfoundselfrowcol )return row =self _exitcell row and col =self _exitcell col drops "triedtoken at the given cell def _marktriedselfrowcol )self _mazecells setrowcolself tried_token drops "pathtoken at the given cell def _markpathselfrowcol )self _mazecells setrowcolself path_token private storage class for holding cell position class _cellpositionobject )def __init__selfrowcol )self row row self col col the class constructorshown in lines - of listing creates multiarray object and two fields to store the starting and exit cells sample maze object for our maze in figure is illustrated in figure the array is created using the arguments to the constructor the cells of the maze are automatically initialized to noneas specified in the previous sectionsince this is the default value used when creating multiarray object the startcell and exitcell fields are set to none since they are initially undefined laterspecific positions will have to be stored when they are defined by the respective methods since cell is indicated by its position within the arraywe can define the cellposition class to store specific cell maze components components of the maze are specified using the various set methodswhich are shown in lines - of listing since the user specifies specific maze elements with each of these methodsthey must first validate the cell position to ensure the