#include #include #include using namespace std; int main(int argc, char * argv[]) { const string letter[] = { "@", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; int N = atol(argv[1]); vector * oldset = new vector(); if (N > 0) oldset->push_back(letter[1]); vector * newset = new vector(); for (int i = 2; i <= N; i += 1) { for (int j = 0; j < oldset->size(); j += 1) { string perm = oldset->at(j); for (int k = 0; k <= perm.length(); k += 1) newset->push_back(perm.substr(0, k) + letter[i] + perm.substr(k)); } swap(oldset, newset); newset->clear(); } for (int i = 0; i < oldset->size(); i += 1) cout << i << ": " << oldset->at(i) << "\n"; }