#include <bits/stdc++.h>
using namespace std;
int n, res;
vector<pair<string, int> > V[2];
vector<pair<int, int> > R;
vector<int> go(int p1, int k1, int p2, int k2, int d) {
  while (p1 <= k1 && p2 <= k2 && (int)V[0][p1].first.size() == d &&
         (int)V[1][p2].first.size() == d) {
    res += d;
    R.push_back(make_pair(V[0][p1].second, V[1][p2].second));
    p1++;
    p2++;
  }
  vector<int> X;
  if (p1 > k1 && p2 > k2) return X;
  if (p1 > k1) {
    vector<int> W;
    for (int i = p2; i <= k2; i++) {
      W.push_back(-(V[1][i].second));
    }
    return W;
  }
  if (p2 > k2) {
    vector<int> W;
    for (int i = p1; i <= k1; i++) {
      W.push_back(V[0][i].second);
    }
    return W;
  }
  if ((int)V[0][p1].first.size() == d) {
    int qwe = p1;
    while (qwe <= k1 && (int)V[0][qwe].first.size() == d) qwe++;
    X = go(p1, qwe - 1, p2, p2 - 1, d + 1);
    p1 = qwe;
  }
  if ((int)V[1][p2].first.size() == d) {
    int qwe = p2;
    while (qwe <= k2 && (int)V[1][qwe].first.size() == d) qwe++;
    X = go(p1, p1 - 1, p2, qwe - 1, d + 1);
    p2 = qwe;
  }
  for (int i = 0; i < 26; i++) {
    int ind1 = p1;
    int ind2 = p2;
    while (ind1 <= k1 && (int)V[0][ind1].first[d] == (int)'a' + i) ind1++;
    while (ind2 <= k2 && (int)V[1][ind2].first[d] == (int)'a' + i) ind2++;
    if (ind1 != p1 || ind2 != p2) {
      vector<int> Y = go(p1, ind1 - 1, p2, ind2 - 1, d + 1);
      while (!Y.empty()) {
        if (X.empty() || (long long)X[X.size() - 1] * Y[Y.size() - 1] >= 0)
          X.push_back(Y[Y.size() - 1]);
        else {
          res += d;
          if (X[X.size() - 1] > 0)
            R.push_back(make_pair(X[X.size() - 1], -Y[Y.size() - 1]));
          else
            R.push_back(make_pair(Y[Y.size() - 1], -X[X.size() - 1]));
          X.pop_back();
        }
        Y.pop_back();
      }
      p1 = ind1;
      p2 = ind2;
    }
  }
  return X;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < n; j++) {
      string s;
      cin >> s;
      V[i].push_back(make_pair(s, j + 1));
    }
    sort(V[i].begin(), V[i].end());
  }
  go(0, n - 1, 0, n - 1, 0);
  cout << res << '\n';
  for (int i = 0; i < n; i++) cout << R[i].first << ' ' << R[i].second << '\n';
  return 0;
}
