text: def lcp(input_str):
      solutions = []
      len_input = len(input_str)
  
      def fill_blanks(idx_subproblem, slate):
          # Base case
          if idx_subproblem == len_input:
              solutions.append("".join(slate))
              return  # Going back up
  
          # Recursive case
          if input_str[idx_subproblem].isdigit():
              slate.append(input_str[idx_subproblem])
              fill_blanks(idx_subproblem + 1, slate)
              slate.pop()
          else:
              slate.append(input_str[idx_subproblem].lower())
              fill_blanks(idx_subproblem + 1, slate)
              slate.pop()
  
              slate.append(input_str[idx_subproblem].upper())
              fill_blanks(idx_subproblem + 1, slate)
              slate.pop()
  
      fill_blanks(0, [])  # Root manager call
  
      return solutions
  
  
  if __name__ == '__main__':
      input_str = "a1b2"
      print(lcp(input_str))
  
  