func_code_string: #include <bits/stdc++.h>   using namespace std;   void pr(char c, int t) {     while (t--) printf( %c , c);   }   int main() {     int n, i, co(0), s;     map<char, int> c;     char ch;     scanf( %d , &n);     for (i = 0; i < n; ++i) {       scanf(  %c , &ch);       ++c[ch];     }     for (const auto &e : c)       if (e.second & 1) ++co;     if (co < 2) {       printf( 1 n );       for (auto it = c.begin(); it != c.end(); ++it)         if (~it->second & 1) pr(it->first, it->second / 2);       for (auto it = c.begin(); it != c.end(); ++it)         if (it->second & 1) {           pr(it->first, it->second);           c.erase(it);           break;         }       for (auto it = c.rbegin(); it != c.rend(); ++it)         if (~it->second & 1) pr(it->first, it->second / 2);       printf(  n );       return 0;     }     for (s = co; n % s || !(n / s & 1); ++s)       ;     printf( %d n , s);     vector<set<pair<int, char>>> str;     vector<int> tot;     for (auto &e : c)       if (e.second & 1) {         set<pair<int, char>> tmp;         tmp.insert({1, e.first});         str.push_back(tmp);         tot.push_back(1);         --e.second;       }     for (auto &e : c)       while (co < s && e.second) {         set<pair<int, char>> tmp;         tmp.insert({1, e.first});         str.push_back(tmp);         tot.push_back(1);         --e.second;         ++co;       }     map<char, int>::iterator it(c.begin());     for (i = 0; i < s; ++i)       while (tot[i] < n / s) {         while (!it->second) ++it;         int tmp(min(it->second, n / s - tot[i]));         str[i].insert({tmp, it->first});         it->second -= tmp;         tot[i] += tmp;       }     for (i = 0; i < s; ++i) {       if (i) printf(   );       for (auto it = str[i].rbegin(); it != str[i].rend(); ++it)         pr(it->second, it->first / 2);       for (auto it = str[i].begin(); it != str[i].end(); ++it)         pr(it->second, (it->first + 1) / 2);     }     printf(  n );     return 0;   }   