#include <bits/stdc++.h>
using namespace std;
const long long inf = 9.2e18;
const int maxn = 400007;
const int INF = 2.1e9;
const int MOD = 1e9 + 7;
const double dif = 1e-7;
const double PI = acos(-1.0);
int n, m, k;
int vis[300];
char s[maxn], ans[maxn];
int main() {
  while (cin >> n) {
    scanf("%s", s);
    memset(vis, 0, sizeof(vis));
    int odd = 0;
    for (int i = 0; i < n; i++) vis[s[i]]++;
    for (int i = 0; i < 300; i++)
      if (vis[i] & 1) odd++;
    int f = 0;
    for (int i = 1; i <= n; i++) {
      if (n % i == 0) {
        int t = n / i;
        if (t & 1) {
          if (odd <= i) {
            cout << i << endl;
            for (int k = 0; k < i; k++) {
              ans[t] = '\0';
              int flag = 0;
              for (int i = 0; i < 300; i++) {
                if (vis[i] & 1) {
                  flag = 1;
                  ans[t / 2] = i;
                  vis[i]--;
                  break;
                }
              }
              if (!flag) {
                for (int i = 0; i < 300; i++) {
                  if (vis[i]) {
                    ans[t / 2] = i;
                    vis[i]--;
                    break;
                  }
                }
              }
              for (int i = 0; i < t / 2; i++) {
                while (vis[f] < 2) f++;
                ans[i] = ans[t - 1 - i] = f;
                vis[f] -= 2;
              }
              printf("%s ", ans);
            }
            cout << endl;
            break;
          }
        } else if (!odd) {
          cout << i << endl;
          for (int k = 0; k < i; k++) {
            ans[t] = '\0';
            for (int i = 0; i < t / 2; i++) {
              while (vis[f] < 2) f++;
              ans[i] = ans[t - 1 - i] = f;
              vis[f] -= 2;
            }
            printf("%s ", ans);
          }
          cout << endl;
          break;
        }
      }
    }
  }
  return 0;
}
