#include <bits/stdc++.h>
using namespace std;
int n, d = 0, ans[800005], Trie[800005][26];
long long sum = 0;
vector<int> A[800005], B[800005];
char s[800005];
void MakeTrie(vector<int> *A) {
  for (int j = (0); j < (n); j++) {
    scanf("%s", &s);
    int l = strlen(s), x = 0;
    for (int i = 0, t; i < l; i++, x = Trie[x][t])
      if (!Trie[x][t = s[i] - 'a']) Trie[x][t] = ++d;
    A[x].push_back(j);
  }
}
void DFS(int u, int f, int d) {
  for (int i = (0); i < (26); i++)
    if (Trie[u][i]) DFS(Trie[u][i], u, d + 1);
  int i = A[u].size(), j = B[u].size();
  for (; i && j; i--, j--) {
    sum += d;
    ans[A[u][i - 1]] = B[u][j - 1];
  }
  if (u) {
    for (; i; i--) A[f].push_back(A[u][i - 1]);
    for (; j; j--) B[f].push_back(B[u][j - 1]);
  }
}
int main() {
  scanf("%d", &n);
  MakeTrie(A);
  MakeTrie(B);
  DFS(0, -1, 0);
  cout << sum << endl;
  for (int i = (0); i < (n); i++) printf("%d %d\n", i + 1, ans[i] + 1);
}
