text: import random
  
  # Python translation by Frank Palazzolo - 2/2021
  
  print(" " * 28 + "AMAZING PROGRAM")
  print(" " * 15 + "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY")
  print()
  print()
  print()
  
  while True:
      width, length = input("What are your width and length?").split(",")
      width = int(width)
      length = int(length)
      if width != 1 and length != 1:
          break
      print("Meaningless dimensions. Try again.")
  
  # Build two 2D arrays
  #
  # used:
  #   Initially set to zero, unprocessed cells
  #   Filled in with consecutive non-zero numbers as cells are processed
  #
  # walls:
  #   Initially set to zero, (all paths blocked)
  #   Remains 0 if there is no exit down or right
  #   Set to 1 if there is an exit down
  #   Set to 2 if there is an exit right
  #   Set to 3 if there are exits down and right
  
  used = []
  walls = []
  for i in range(length):
      used.append([0] * width)
      walls.append([0] * width)
  
  # Use direction variables with nice names
  GO_LEFT, GO_UP, GO_RIGHT, GO_DOWN = [0, 1, 2, 3]
  # Give Exit directions nice names
  EXIT_DOWN = 1
  EXIT_RIGHT = 2
  
  # Pick a random entrance, mark as used
  enter_col = random.randint(0, width - 1)
  row, col = 0, enter_col
  count = 1
  used[row][col] = count
  count = count + 1
  
  while count != width * length + 1:
      # remove possible directions that are blocked or
      # hit cells that we have already processed
      possible_dirs = [GO_LEFT, GO_UP, GO_RIGHT, GO_DOWN]
      if col == 0 or used[row][col - 1] != 0:
          possible_dirs.remove(GO_LEFT)
      if row == 0 or used[row - 1][col] != 0:
          possible_dirs.remove(GO_UP)
      if col == width - 1 or used[row][col + 1] != 0:
          possible_dirs.remove(GO_RIGHT)
      if row == length - 1 or used[row + 1][col] != 0:
          possible_dirs.remove(GO_DOWN)
  
      # If we can move in a direction, move and make opening
      if len(possible_dirs) != 0:
          direction = random.choice(possible_dirs)
          if direction == GO_LEFT:
              col = col - 1
              walls[row][col] = EXIT_RIGHT
          elif direction == GO_UP:
              row = row - 1
              walls[row][col] = EXIT_DOWN
          elif direction == GO_RIGHT:
              walls[row][col] = walls[row][col] + EXIT_RIGHT
              col = col + 1
          elif direction == GO_DOWN:
              walls[row][col] = walls[row][col] + EXIT_DOWN
              row = row + 1
          used[row][col] = count
          count = count + 1
      # otherwise, move to the next used cell, and try again
      else:
          while True:
              if col != width - 1:
                  col = col + 1
              elif row != length - 1:
                  row, col = row + 1, 0
              else:
                  row, col = 0, 0
              if used[row][col] != 0:
                  break
  
  # Add a random exit
  col = random.randint(0, width - 1)
  row = length - 1
  walls[row][col] = walls[row][col] + 1
  
  # Print the maze
  for col in range(width):
      if col == enter_col:
          print(".  ", end="")
      else:
          print(".--", end="")
  print(".")
  for row in range(length):
      print("I", end="")
      for col in range(width):
          if walls[row][col] < 2:
              print("  I", end="")
          else:
              print("   ", end="")
      print()
      for col in range(width):
          if walls[row][col] == 0 or walls[row][col] == 2:
              print(":--", end="")
          else:
              print(":  ", end="")
      print(".")
  