#include <bits/stdc++.h>
using namespace std;
char s[800010];
int ch[800010][26];
vector<int> f[800010];
int n, m;
int ansn;
int ans[100010];
int sta[100010], sxa[100010], stas;
int stb[100010], sxb[100010], stbs;
void dfs(int r, int dep = 0) {
  for (int j = 0; j < f[r].size(); j++) {
    if (f[r][j] < n) {
      sta[stas++] = f[r][j];
      sxa[stas - 1] = dep;
    } else {
      stb[stbs++] = f[r][j];
      sxb[stbs - 1] = dep;
    }
  }
  for (int i = 0; i < 26; i++) {
    if (ch[r][i]) {
      dfs(ch[r][i], dep + 1);
      if (stas && sxa[stas - 1] > dep) {
        sxa[stas - 1] = dep;
      }
      if (stbs && sxb[stbs - 1] > dep) {
        sxb[stbs - 1] = dep;
      }
    }
  }
  while (stas && stbs && sxa[stas - 1] >= dep && sxb[stbs - 1] >= dep) {
    ansn += dep;
    int ta = sxa[stas - 1], tb = sxb[stbs - 1];
    ans[sta[--stas]] = stb[--stbs];
    if (stas && sxa[stas - 1] > ta) {
      sxa[stas - 1] = ta;
    }
    if (stbs && sxb[stbs - 1] > tb) {
      sxb[stbs - 1] = tb;
    }
  }
}
int main() {
  scanf("%d", &n);
  int r = 0;
  m = 1;
  for (int i = 0; i < n; i++) {
    scanf("%s", s);
    r = 0;
    for (int j = 0; s[j]; j++) {
      int x = s[j] - 'a';
      if (!ch[r][x]) {
        ch[r][x] = m++;
      }
      r = ch[r][x];
    }
    f[r].push_back(i);
  }
  for (int i = 0; i < n; i++) {
    scanf("%s", s);
    r = 0;
    for (int j = 0; s[j]; j++) {
      int x = s[j] - 'a';
      if (!ch[r][x]) {
        ch[r][x] = m++;
      }
      r = ch[r][x];
    }
    f[r].push_back(i + n);
  }
  dfs(0);
  printf("%d\n", ansn);
  for (int i = 0; i < n; i++) {
    printf("%d %d\n", i + 1, ans[i] + 1 - n);
  }
  return 0;
}
