#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6, maxv = 255;
char a[maxn], pos[maxv];
char out[maxn];
int record[maxv];
int n, cnt;
void print(int len) {
  int num = n / len, mid = len >> 1;
  bool isodd = len & 1;
  printf("%d\n", num);
  for (int j = 0; j < num; ++j) {
    int p = 1;
    for (int k = 0; k < cnt; ++k) {
      int x = record[pos[k]] >> 1;
      for (int u = 0; u < x && p <= mid; ++u) {
        out[p] = out[len + 1 - p] = pos[k];
        record[pos[k]] -= 2;
        p++;
      }
    }
    bool flag = true;
    if (isodd) {
      for (int k = 0; k < cnt; ++k) {
        if (record[pos[k]] & 1) {
          out[mid + 1] = pos[k];
          record[pos[k]]--;
          flag = false;
          break;
        }
      }
    }
    if (flag) {
      for (int k = 0; k < cnt; ++k) {
        if (record[pos[k]]) {
          out[mid + 1] = pos[k];
          record[pos[k]]--;
          break;
        }
      }
    }
    out[len + 1] = '\0';
    printf("%s", out + 1);
    if (j == num - 1)
      printf("\n");
    else
      printf(" ");
  }
  return;
}
void solve() {
  memset(record, 0, sizeof(record));
  cnt = 0;
  for (int i = 0; a[i]; ++i) {
    if (!record[a[i]]) pos[cnt++] = a[i];
    record[a[i]]++;
  }
  sort(pos, pos + cnt);
  int dui_num = 0;
  for (int i = 0; i < 150; ++i) {
    dui_num += record[i] >> 1;
  }
  for (int i = n; i >= 1; --i) {
    if (n % i == 0) {
      if (dui_num >= (i >> 1) * (n / i)) {
        print(i);
        return;
      }
    }
  }
  return;
}
int main() {
  while (scanf("%d", &n) != EOF) {
    scanf("%s", a);
    solve();
  }
  return 0;
}
