#include <bits/stdc++.h>
using namespace std;
bool can(int a, int b) {
  if ((b / 2) % a == 0)
    return true;
  else
    return false;
}
int main() {
  int n, m, cnt[256];
  string s, sisi;
  string tengah = "";
  deque<char> v;
  string huruf = "";
  cin >> n;
  cin >> s;
  for (int i = 0; i < 256; i++) cnt[i] = 0;
  for (int i = 0; i < n; i++) cnt[s[i]]++;
  m = 0;
  for (int i = 0; i < 256; i++)
    if (cnt[i] % 2) {
      cnt[i]--;
      tengah.push_back((char)i);
      m++;
    }
  for (int i = 0; i < 256; i++)
    while (cnt[i]) {
      huruf.push_back((char)i);
      cnt[i]--;
    }
  int i = 0;
  if (m == 0) {
    m++;
    sisi = "";
    while (!huruf.empty()) {
      sisi.push_back(huruf.back());
      huruf.pop_back();
      huruf.pop_back();
    }
    cout << m << endl;
    cout << sisi;
    reverse(sisi.begin(), sisi.end());
    cout << sisi;
  } else {
    while (!huruf.empty()) {
      if (((n - m) / 2) % m == 0) break;
      i = m;
      tengah.push_back(huruf.back());
      huruf.pop_back();
      if (!huruf.empty()) {
        tengah.push_back(huruf.back());
        huruf.pop_back();
      } else {
        m += 1;
        break;
      }
      m += 2;
    }
    cout << m << endl;
    for (int i = 0; i < m; i++) {
      sisi = "";
      if (i) cout << " ";
      for (int j = 0; j < (n / m) / 2; j++) {
        sisi.push_back(huruf.back());
        huruf.pop_back();
        huruf.pop_back();
      }
      cout << sisi << tengah[i];
      reverse(sisi.begin(), sisi.end());
      cout << sisi;
    }
  }
  cout << endl;
  return 0;
}
