func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, ji[300], k, qi, mz[400010];   char s[400010], tp[400010];   int main() {     scanf( %d%s , &n, s + 1);     for (int i = 1; i <= n; i++) {       ji[s[i]]++;     }     for (int i = 0; i < 300; i++)       if (ji[i] & 1) k++;     qi = k;     if (!qi) {       for (k = 1;; k++)         if (n % k == 0) break;       n /= k;       printf( %d n , k);       if (n & 1) {         for (int i = 0, tt = 0; i < 300; i++) {           while (ji[i]) {             mz[++tt] = i;             ji[i]--;             if (tt == k) goto qaz;           }         }       qaz:;         n >>= 1;         for (int i = 1, p = 0; i <= k; i++) {           for (int j = 1; j <= n; j++) {             while (!ji[p]) p++;             ji[p] -= 2;             tp[j] = tp[n * 2 + 2 - j] = p;           }           tp[n + 1] = mz[i];           printf( %s  , tp + 1);         }         return 0;       }       n >>= 1;       for (int i = 1, p = 0; i <= k; i++) {         for (int j = 1; j <= n; j++) {           while (!ji[p]) p++;           ji[p] -= 2;           tp[j] = tp[n * 2 + 1 - j] = p;         }         printf( %s  , tp + 1);       }       return 0;     }     for (;; k++)       if (n % k == 0 && (n / k) & 1) break;     printf( %d n , k);     n /= k;     int tt = 0;     for (int i = 0; i < 300; i++)       if (ji[i] & 1) {         mz[++tt] = i;         ji[i]--;       }     if (tt == k) goto qazz;     for (int i = 0; i < 300; i++) {       while (ji[i]) {         mz[++tt] = i;         ji[i]--;         if (tt == k) goto qazz;       }     }   qazz:;     n >>= 1;     for (int i = 1, p = 0; i <= k; i++) {       for (int j = 1; j <= n; j++) {         while (!ji[p]) p++;         ji[p] -= 2;         tp[j] = tp[n * 2 + 2 - j] = p;       }       tp[n + 1] = mz[i];       printf( %s  , tp + 1);     }     return 0;   }   