#define isLetter(x) (('a' <= x && x <= 'z') || ('A' <= x && x <= 'Z'))
#define isCapital(x) (('A' <= x && x <= 'Z'))
class Solution {
public:
char LetterCovert(char letter)
{
if(isCapital(letter)) return letter - 'A' + 'a';
else return letter - 'a' + 'A';
}
void BackTrack(string s, vector<string> &res , int k)
{
if(k == s.size()){
res.push_back(s);
return;
}
if(isLetter(s.at(k))){
BackTrack(s, res, k + 1);
s.at(k) = LetterCovert(s.at(k));
BackTrack(s, res, k + 1);
s.at(k) = LetterCovert(s.at(k));
} else {
BackTrack(s, res, k + 1);
}
}
vector<string> letterCasePermutation(string S)
{
vector<string> res;
BackTrack(S, res, 0);
return res;
}
};