#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
const int MAXN = 53;
int v[MAXN], u[MAXN];
int a[MAXN][MAXN];
bool used1[MAXN], used2[MAXN];
int minv[MAXN];
int p1[MAXN], p2[MAXN];
int parent[MAXN];
int k;
int dfs(int vert) {
  if (used1[vert]) {
    return 0;
  }
  used1[vert] = true;
  for (int i = 1; i <= k; i++) {
    if (a[vert][i] - u[vert] - v[i] < a[minv[i]][i] - u[minv[i]] - v[i]) {
      minv[i] = vert;
    }
  }
  int res = 0;
  for (int i = 1; i <= k; i++) {
    if (!(a[vert][i] - u[vert] - v[i]) && i != p1[vert] && !used2[i]) {
      used2[i] = true;
      parent[i] = vert;
      if (!p2[i]) {
        res = i;
        break;
      }
      if (!used1[p2[i]]) {
        res = dfs(p2[i]);
        if (res) {
          break;
        }
      }
    }
  }
  return res;
}
void hungarian() {
  for (int i = 1; i <= k; i++) {
    a[0][i] = ((int)(1e9));
  }
  for (int i = 1; i <= k; i++) {
    memset(used1, 0, sizeof(used1));
    memset(used2, 0, sizeof(used2));
    memset(minv, 0, sizeof(minv));
    int vert = i;
    int res;
    while (true) {
      res = dfs(vert);
      if (res) {
        int v2 = res, v1 = parent[res];
        do {
          int vv2 = p1[v1];
          p1[v1] = v2;
          p2[v2] = v1;
          v2 = vv2;
          v1 = parent[v2];
        } while (v2);
        break;
      } else {
        int delta = ((int)(1e9));
        for (int j = 1; j <= k; j++) {
          if (!used2[j] && delta > a[minv[j]][j] - u[minv[j]] - v[j]) {
            delta = a[minv[j]][j] - u[minv[j]] - v[j];
            vert = minv[j];
          }
        }
        for (int j = 1; j <= k; j++) {
          if (used1[j]) {
            u[j] += delta;
          }
          if (used2[j]) {
            v[j] -= delta;
          }
        }
        used1[vert] = false;
      }
    }
  }
}
int n;
char my[2000500], r[2000500];
int w[MAXN][MAXN];
int num(char c) {
  if ('a' <= c) {
    return c - 'a' + 1;
  } else {
    return 27 + c - 'A';
  }
}
int symb(int num) {
  if (num <= 26) {
    return 'a' + num - 1;
  } else {
    return 'A' + num - 27;
  }
}
void solve() {
  scanf("%d%d\n%s\n%s", &n, &k, &my, &r);
  for (int i = 0; i < n; i++) {
    w[num(r[i])][num(my[i])]++;
  }
  for (int i = 1; i <= k; i++) {
    for (int j = 1; j <= k; j++) {
      a[i][j] = -w[i][j];
      a[i][j] += 2000000;
    }
  }
  hungarian();
  int ans = 0;
  for (int i = 1; i <= k; i++) {
    ans += w[p2[i]][i];
  }
  printf("%d\n", ans);
  for (int i = 1; i <= k; i++) {
    printf("%c", symb(p2[i]));
  }
}
int main() {
  srand(1337);
  solve();
  return 0;
}
