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