code: def all_casings(input_string):
      
      if not input_string:
          yield ""
      else:
          first = input_string[:1]
          if first.lower() == first.upper():
              for sub_casing in all_casings(input_string[1:]):
                  yield first + sub_casing
          else:
              for sub_casing in all_casings(input_string[1:]):
                  yield first.lower() + sub_casing
                  yield first.upper() + sub_casing
docs: Permute all casings of a given string.
  
      A pretty algorithm, via @Amber
      http://stackoverflow.com/questions/6792803/finding-all-possible-case-permutations-in-python