#include <bits/stdc++.h>
using namespace std;
const int N = 4e5 + 1;
void solve() {
  long long n;
  cin >> n;
  char s[N];
  scanf("\n%s", s);
  map<char, int> lett;
  for (int i = 0; i < n; i++) lett[s[i]]++;
  int cnt_odd = 0;
  for (map<char, int>::iterator it = lett.begin(); it != lett.end(); it++)
    if (it->second % 2 != 0) cnt_odd++;
  int cnt = cnt_odd;
  if (cnt == 0) {
    string ans = "";
    for (map<char, int>::iterator it = lett.begin(); it != lett.end(); it++)
      for (int j = 0; j < (it->second / 2); j++) ans = ans + it->first;
    printf("1\n");
    for (int i = 0; i < (int)ans.size(); i++) printf("%c", ans[i]);
    for (int i = (int)ans.size() - 1; i >= 0; i--) printf("%c", ans[i]);
  } else {
    while ((n - cnt) % (2 * cnt) != 0) {
      cnt += 2;
    }
    printf("%d\n", cnt);
    vector<string> res(cnt, "");
    int ind = 0;
    for (map<char, int>::iterator it = lett.begin(); it != lett.end(); it++)
      if (it->second % 2 == 1) {
        res[ind] += it->first;
        it->second--;
        ind++;
      }
    queue<char> q;
    for (map<char, int>::iterator it = lett.begin(); it != lett.end(); it++)
      for (int i = 0; i < it->second; i++) q.push(it->first);
    while (ind < (int)res.size()) {
      res[ind] += q.front();
      q.pop();
      ind++;
    }
    while (!q.empty()) {
      for (int i = 0; i < (int)res.size(); i++) {
        res[i] = res[i] + q.front();
        q.pop();
        q.pop();
      }
    }
    for (int i = 0; i < (int)res.size(); i++) {
      for (int j = (int)res[i].size() - 1; j > 0; j--) printf("%c", res[i][j]);
      for (int j = 0; j < (int)res[i].size(); j++) printf("%c", res[i][j]);
      printf(" ");
    }
  }
}
int main() {
  solve();
  return 0;
}
