#include <bits/stdc++.h>
using namespace std;
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n;
  cin >> n;
  string s;
  cin >> s;
  map<char, long long> mm;
  for (long long i = 0; i < s.size(); i++) {
    mm[s[i]]++;
  }
  long long N = 0;
  vector<char> nechet;
  for (map<char, long long>::iterator it = mm.begin(); it != mm.end(); it++) {
    pair<char, long long> p = *it;
    if (p.second % 2 != 0) {
      N++;
      nechet.push_back(p.first);
    }
  }
  long long answer = 0;
  for (long long del = 1; del <= s.size(); del++) {
    long long wanted = s.size() / del;
    if (del % 2 == 0) wanted = 0;
    if ((N <= wanted && (wanted - N) % 2 == 0) && s.size() % del == 0)
      answer = del;
  }
  cout << s.size() / answer << endl;
  map<char, long long> del;
  long long u = 0, U = 0;
  string nqs;
  for (long long i = 0; i < s.size(); i++) {
    if (mm[s[i]] % 2 != 0)
      mm[s[i]]--;
    else
      nqs += s[i];
  }
  for (long long i = 0; i < s.size() / answer; i++) {
    string aa;
    for (long long j = 0; j < answer / 2; j++) {
      while (del[nqs[u]] > 0) {
        del[nqs[u]]--;
        u++;
      }
      aa += nqs[u];
      del[nqs[u]]++;
      u++;
    }
    while (del[nqs[u]] > 0) {
      del[nqs[u]]--;
      u++;
    }
    if (answer % 2 != 0) {
      if (U == nechet.size()) {
        aa += nqs[u];
        u++;
        del[nqs[u - 1]]++;
        nechet.push_back(nqs[u - 1]);
      } else {
        aa += nechet[U];
        U++;
      }
    }
    for (long long j = answer / 2 - 1; j >= 0; j--) {
      aa += aa[j];
    }
    cout << aa << " ";
  }
  return 0;
}
