- 比較関数を変えてnext_permutation()を呼び出す
- 比較関数を関数オブジェクト等にすればもっと綺麗だった
int main() {
int letterToIndex[0x100];
char indexToLetter[0x100];
for (char c = 'A'; c <= 'Z'; ++c) {
letterToIndex[c] = (c - 'A') * 2;
indexToLetter[(c - 'A') * 2] = c;
}
for (char c = 'a'; c <= 'z'; ++c) {
letterToIndex[c] = (c - 'a') * 2 + 1;
indexToLetter[(c - 'a') * 2 + 1] = c;
}
int N;
cin >> N;
for (int n = 0; n < N; ++n) {
string s;
cin >> s;
vector<int> v;
for (string::iterator it = s.begin(); it != s.end(); ++it) {
v.push_back(letterToIndex[*it]);
}
sort(v.begin(), v.end());
do {
for (vector<int>::iterator it = v.begin(), itEnd = v.end(); it != itEnd; ++it) {
cout << indexToLetter[*it];
}
cout << endl;
} while (next_permutation(v.begin(), v.end()));
}
}