#include <bits/stdc++.h>
using namespace std;
const int MAX = 52;
int mat[2][MAX], cnt[MAX][MAX], cost[MAX][MAX], n;
bool mark[MAX], vc[2][MAX];
int num(char c) {
  if ('a' <= c && c <= 'z') return c - 'a';
  return c - 'A' + 26;
}
char ch(int num) {
  if (num < 26) return 'a' + num;
  return num - 26 + 'A';
}
void opt() {
  for (int i = 0; i < n; i++) {
    int mn = 1e9;
    for (int j = 0; j < n; j++) mn = min(mn, cost[i][j]);
    for (int j = 0; j < n; j++) cost[i][j] -= mn;
  }
  for (int i = 0; i < n; i++) {
    int mn = 1e9;
    for (int j = 0; j < n; j++) mn = min(mn, cost[j][i]);
    for (int j = 0; j < n; j++) cost[j][i] -= mn;
  }
}
bool dfs(int v) {
  if (mark[v]) return false;
  mark[v] = true;
  for (int u = 0; u < n; u++)
    if (!cost[v][u] && (mat[1][u] == -1 || dfs(mat[1][u]))) {
      mat[1][u] = v;
      mat[0][v] = u;
      return true;
    }
  return false;
}
int solve() {
  bool found = true;
  while (found) {
    found = false;
    memset(mark, false, sizeof(mark));
    for (int i = 0; i < n; i++)
      if (mat[0][i] == -1) found |= dfs(i);
  }
  memset(vc, false, sizeof(vc));
  memset(mark, false, sizeof(mark));
  for (int i = 0; i < n; i++)
    if (mat[0][i] == -1) dfs(i);
  int ans = 0;
  for (int i = 0; i < n; i++)
    if (mat[0][i] != -1) {
      if (mark[i])
        vc[1][mat[0][i]] = true;
      else
        vc[0][i] = true;
      ans++;
    }
  return ans;
}
void update() {
  int mn = 1e9;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      if (!vc[0][i] && !vc[1][j]) mn = min(mn, cost[i][j]);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      if (!vc[0][i] && !vc[1][j]) cost[i][j] -= mn;
      if (vc[0][i] && vc[1][j]) cost[i][j] += mn;
    }
}
int main() {
  ios::sync_with_stdio(false);
  memset(mat, -1, sizeof(mat));
  cin >> n >> n;
  string s, t;
  cin >> s >> t;
  for (int i = 0; i < s.size(); i++) cnt[num(s[i])][num(t[i])]++;
  int mx = 0;
  for (int i = 0; i < MAX; i++)
    for (int j = 0; j < MAX; j++) mx = max(mx, cnt[i][j]);
  for (int i = 0; i < MAX; i++)
    for (int j = 0; j < MAX; j++) cost[i][j] = mx - cnt[i][j];
  while (true) {
    opt();
    if (solve() == n) break;
    update();
  }
  int ans = 0;
  for (int i = 0; i < n; i++) ans += cnt[i][mat[0][i]];
  cout << ans << endl;
  for (int i = 0; i < n; i++) cout << ch(mat[0][i]);
  cout << endl;
  return 0;
}
