#include <bits/stdc++.h>
using namespace std;
int n;
char s[400001];
int counter[128];
int odd;
char word[400001];
bool check(int pieces) {
  int len = n / pieces;
  if (len & 1) {
    if (odd > pieces)
      return false;
    else {
      if (pieces & 1) {
        return odd & 1;
      } else {
        return !(odd & 1);
      }
    }
  } else {
    return odd == 0;
  }
}
void construct(int pieces) {
  vector<char> evens, odds;
  for (int i = 0; i < 128; i++) {
    for (int j = 0; j < counter[i] / 2 * 2; j++) {
      evens.push_back((char)i);
    }
    if (counter[i] & 1) odds.push_back((char)i);
  }
  int len = n / pieces;
  for (int i = 0; i < pieces; i++) {
    if (i) printf(" ");
    for (int j = 0; j < len / 2; j++) {
      word[j] = evens.back();
      evens.pop_back();
      word[len - 1 - j] = evens.back();
      evens.pop_back();
    }
    if (len & 1) {
      if (odds.size()) {
        word[len / 2] = odds.back();
        odds.pop_back();
      } else {
        word[len / 2] = evens.back();
        evens.pop_back();
        odds.push_back(evens.back());
        evens.pop_back();
      }
    }
    word[len] = '\0';
    printf("%s", word);
  }
  printf("\n");
}
int main() {
  scanf("%d", &n);
  scanf("%s", s);
  for (int i = 0; i < n; i++) {
    counter[(int)s[i]]++;
  }
  vector<int> divisors;
  for (int i = 1; i <= n; i++) {
    if (n % i == 0) {
      divisors.push_back(i);
    }
  }
  for (int i = 0; i < 128; i++) {
    if (counter[i] & 1) odd++;
  }
  if (odd == 0) {
    printf("1\n");
    construct(1);
    return 0;
  } else {
    auto pieces = lower_bound(divisors.begin(), divisors.end(), odd);
    while (!check(*pieces)) {
      pieces++;
    }
    printf("%d\n", *pieces);
    construct(*pieces);
  }
}
