#include <bits/stdc++.h>
using namespace std;
long long bigmod(long long b, long long p, long long md) {
  if (p == 0) return 1;
  if (p % 2 == 1) {
    return ((b % md) * bigmod(b, p - 1, md)) % md;
  } else {
    long long y = bigmod(b, p / 2, md);
    return (y * y) % md;
  }
}
int cnt[70];
char getchar(int a) {
  if (a >= 0 && a <= 9)
    return '0' + a;
  else if (a >= 10 && a <= 35)
    return 'a' + a - 10;
  else
    return 'A' + a - 36;
}
int main() {
  int n;
  cin >> n;
  string str;
  cin >> str;
  for (int i = 0; i < n; i++) {
    if (str[i] >= '0' && str[i] <= '9')
      cnt[str[i] - '0']++;
    else if (str[i] >= 'a' && str[i] <= 'z')
      cnt[str[i] - 'a' + 10]++;
    else
      cnt[str[i] - 'A' + 36]++;
  }
  vector<int> odd;
  for (int i = 0; i <= 61; i++) {
    if (cnt[i] % 2) {
      odd.push_back(i);
    }
  }
  if (odd.size() == 0) {
    cout << 1 << endl;
    deque<char> dq;
    for (int i = 0; i <= 61; i++) {
      while (cnt[i]) {
        dq.push_back(getchar(i));
        dq.push_front(getchar(i));
        cnt[i] -= 2;
      }
    }
    for (auto it = dq.begin(); it != dq.end(); it++) cout << *it;
    cout << endl;
    return 0;
  }
  int sz = 0;
  for (int i = odd.size(); i <= str.size(); i += 2) {
    if (str.size() % i) continue;
    sz = str.size() / i;
    if (sz % 2) break;
  }
  int total = str.size() / sz;
  cout << total << endl;
  int c = 0;
  while (c != total) {
    deque<char> dq;
    if (c < odd.size())
      dq.push_back(getchar(odd[c])), cnt[odd[c]]--;
    else {
      for (int i = 0; i <= 61; i++) {
        if (cnt[i]) {
          dq.push_back(getchar(i));
          cnt[i]--;
          break;
        }
      }
    }
    for (int i = 0; i <= 61; i++) {
      while (cnt[i] >= 2 && dq.size() < sz) {
        dq.push_back(getchar(i));
        dq.push_front(getchar(i));
        cnt[i] -= 2;
      }
    }
    for (auto it = dq.begin(); it != dq.end(); it++) cout << *it;
    cout << " ";
    c++;
  }
  return 0;
}
