#include <bits/stdc++.h>
#pragma GCC optimize(3, "Ofast", "inline")
using namespace std;
const long long maxn = (long long)4e5 + 5;
const long long mod = 1000000007;
const long long inf = 0x3f3f3f3f;
char s[maxn];
long long numn[10];
long long numu[30];
long long numl[30];
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  long long n;
  cin >> n >> (s + 1);
  for (long long i = 1; i <= n; ++i)
    if (isdigit(s[i]))
      ++numn[s[i] - '0'];
    else if (isupper(s[i]))
      ++numu[s[i] - 'A'];
    else
      ++numl[s[i] - 'a'];
  string tmp;
  vector<char> v;
  for (long long i = 0; i < 10; ++i) {
    for (long long j = 1; j <= numn[i] / 2; ++j) tmp += (char)(i + '0');
    if (numn[i] & 1) v.push_back(i + '0');
  }
  for (long long i = 0; i < 26; ++i) {
    for (long long j = 1; j <= numu[i] / 2; ++j) tmp += (char)(i + 'A');
    if (numu[i] & 1) v.push_back(i + 'A');
  }
  for (long long i = 0; i < 26; ++i) {
    for (long long j = 1; j <= numl[i] / 2; ++j) tmp += (char)(i + 'a');
    if (numl[i] & 1) v.push_back(i + 'a');
  }
  if (v.empty()) {
    cout << 1 << '\n';
    cout << tmp;
    reverse(tmp.begin(), tmp.end());
    cout << tmp;
    return 0;
  }
  while (!tmp.empty() && tmp.length() % v.size() != 0) {
    v.push_back(tmp.back());
    v.push_back(tmp.back());
    tmp.pop_back();
  }
  cout << v.size() << '\n';
  long long num = tmp.length() / v.size();
  long long now = 0;
  for (auto &i : v) {
    string ans;
    for (long long j = 1; j <= num; ++j) ans += tmp[now++];
    cout << ans << i;
    reverse(ans.begin(), ans.end());
    cout << ans << ' ';
  }
  return 0;
}
