fork(2) download
  1. f=lambda s:s and{r[0]+t for r in{s,s.swapcase()}for t in f(s[1:])}or{s}
  2.  
  3. for s in 'a1a', 'abc', 'Hi!', 'ž1a':
  4. print(f(s))
Success #stdin #stdout 0.02s 9984KB
stdin
Standard input is empty
stdout
{'A1A', 'a1A', 'A1a', 'a1a'}
{'ABC', 'abC', 'AbC', 'Abc', 'abc', 'aBc', 'aBC', 'ABc'}
{'Hi!', 'HI!', 'hI!', 'hi!'}
{'Ž1a', 'Ž1A', 'ž1A', 'ž1a'}