func_code_string: #include <bits/stdc++.h>   using namespace std;   const double eps = 1e-7;   const int MOD = 1e9 + 7;   const long long INFLL = 0x3f3f3f3f3f3f3f3f;   const int INF = 0x3f3f3f3f;   const int MAXN = 4e5 + 5;   char s[MAXN];   int vis[200], t[200];   int check(int n, int l) {     int need = (l / 2) * n, cnt = 0;     for (int i = 0; i < 200; i++) cnt += vis[i] / 2;     if (cnt >= need) return 1;     return 0;   }   void solve(int n, int l) {     vector<char> v1, v2;     printf( %d n , n);     for (int i = 0; i < 200; i++) {       while (vis[i] >= 2) v1.push_back((char)i), vis[i] -= 2;       if (vis[i]) v2.push_back((char)i);     }     for (int i = 0; i < n; i++) {       int p = 0;       while (p < l / 2) {         s[p] = s[l - 1 - p] = v1[v1.size() - 1];         v1.pop_back();         p++;       }       if (l & 1) {         if (v2.empty())           s[p] = v1[v1.size() - 1], v2.push_back(v1[v1.size() - 1]),           v1.pop_back();         else           s[p] = v2[v2.size() - 1], v2.pop_back();       }       s[l] = 0;       printf( %s  , s);     }   }   int main() {     int n;     cin >> n;     scanf( %s , s + 1);     for (int i = 1; i <= n; i++) vis[s[i]]++;     int maxn = INF;     for (int i = 1; i * i <= n; i++) {       if (n % i == 0) {         if (check(i, n / i)) maxn = min(i, maxn);         if (check(n / i, i)) maxn = min(n / i, maxn);       }     }     solve(maxn, n / maxn);   }   