// @BEGIN_OF_SOURCE_CODE /* @JUDGE_ID: 17243NT 195 C++ "Frequency table, don't permute all: no comparing strings" */ // Send to judge@uva.es #include #include #include #ifdef ONLINE_JUDGE #define ins cin #define outs cout #else #define ins fin #define outs fout ifstream fin("myprog.in"); ofstream fout("myprog.out"); #endif #include #include #include #define ALPHA 52 #define MAXLENGTH 5000 char str[MAXLENGTH], cstr[MAXLENGTH]; int len, freq[ALPHA]; void start(int c); int index(char c); char character(int i); int main() { int i, j, n; ins >> n; for(j = 0; j < n; j++) { ins >> str; for(i = 0; i < ALPHA; i++) freq[i] = 0; len = strlen(str); for(i = 0; i < len; i++) freq[index(str[i])]++; start(0); } return 0; } int index(char c) { if(c >= 'A' && c <= 'Z') return 2 * (c - 'A'); return 2 * (c - 'a') + 1; } char character(int i) { if(i % 2 == 0) return ((char) i / 2) + 'A'; return ((char) i / 2) + 'a'; } void start(int c) { int i; if(c >= len) { cstr[c] = '\0'; outs << cstr << endl; return; } for(i = 0; i < ALPHA; i++) { if(freq[i] > 0) { cstr[c] = character(i); freq[i]--; start(c + 1); freq[i]++; } } } // @END_OF_SOURCE_CODE