#include <bits/stdc++.h>
using namespace std;
const int N = 100000;
const int L = N * 8;
int pre[N + 7], next1[N + 7], next2[N + 7];
int ch[L + 7][26], head1[L + 7], tail1[L + 7], head2[L + 7], tail2[L + 7],
    d[L + 7];
char s[L + 7];
int main() {
  int n;
  scanf("%d", &n);
  int cnt = d[0] = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%s", s);
    int l = strlen(s), k = 0;
    for (int j = 0; j < l; j++) {
      int x = s[j] - 97;
      if (!ch[k][x]) {
        ch[k][x] = ++cnt;
        d[cnt] = d[k] + 1;
      }
      k = ch[k][x];
    }
    if (!head1[k])
      head1[k] = tail1[k] = i;
    else
      tail1[k] = next1[tail1[k]] = i;
  }
  for (int i = 1; i <= n; i++) {
    scanf("%s", s);
    int l = strlen(s), k = 0;
    for (int j = 0; j < l; j++) {
      int x = s[j] - 97;
      if (!ch[k][x]) ch[k][x] = ++cnt;
      k = ch[k][x];
    }
    if (!head2[k])
      head2[k] = tail2[k] = i;
    else
      tail2[k] = next2[tail2[k]] = i;
  }
  long long ans = 0;
  for (int i = cnt; i >= 0; i--) {
    for (int j = 0; j < 26; j++) {
      int x = ch[i][j];
      if (!x) continue;
      if (head1[x]) {
        if (!head1[i]) {
          head1[i] = head1[x];
          tail1[i] = tail1[x];
        } else {
          next1[tail1[i]] = head1[x];
          tail1[i] = tail1[x];
        }
      }
      if (head2[x]) {
        if (!head2[i]) {
          head2[i] = head2[x];
          tail2[i] = tail2[x];
        } else {
          next2[tail2[i]] = head2[x];
          tail2[i] = tail2[x];
        }
      }
    }
    while (head1[i] && head2[i]) {
      ans += d[i];
      pre[head1[i]] = head2[i];
      head1[i] = next1[head1[i]];
      head2[i] = next2[head2[i]];
    }
  }
  cout << ans << endl;
  for (int i = 1; i <= n; i++) printf("%d %d\n", i, pre[i]);
  return 0;
}
