#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const int N = 100005;
const int K = 26;
struct Vertex {
  int next[K];
  vector<pair<int, int> > leaf;
  Vertex() { fill(next, next + K, -1); }
};
vector<Vertex> trie;
vector<pair<int, int> > ans;
string a[N], b[N];
void insertString(string s, int turn, int color) {
  int v = 0;
  for (auto u : s) {
    int c = u - 'a';
    if (trie[v].next[c] == -1) {
      trie[v].next[c] = (int)trie.size();
      trie.emplace_back();
    }
    v = trie[v].next[c];
  }
  trie[v].leaf.push_back(make_pair(turn, color));
}
vector<vector<int> > findLongestCommonString(int v) {
  vector<vector<int> > res;
  res.resize(2);
  for (auto u : trie[v].leaf) {
    if (u.second == 1) {
      res[0].push_back(u.first);
    } else {
      res[1].push_back(u.first);
    }
  }
  for (int i = 0; i <= 25; ++i) {
    if (trie[v].next[i] != -1) {
      vector<vector<int> > temp = findLongestCommonString(trie[v].next[i]);
      for (int j = 0; j <= 1; ++j) {
        for (auto u : temp[j]) {
          res[j].push_back(u);
        }
      }
    }
  }
  int i = 0;
  while (i < (int)res[0].size() && i < (int)res[1].size()) {
    ans.push_back(make_pair(res[0][i], res[1][i]));
    i++;
  }
  vector<vector<int> > temp;
  temp.resize(2);
  int ini = i;
  for (int j = 0; j <= 1; ++j) {
    i = ini;
    while (i < (int)res[j].size()) {
      temp[j].push_back(res[j][i]);
      i++;
    }
  }
  return temp;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  int n;
  cin >> n;
  long long int sum = 0;
  trie.emplace_back();
  for (int i = 0; i <= n - 1; ++i) {
    cin >> a[i];
    insertString(a[i], i, 1);
  }
  for (int i = 0; i <= n - 1; ++i) {
    cin >> b[i];
    insertString(b[i], i, 2);
  }
  vector<vector<int> > temp = findLongestCommonString(0);
  for (auto v : ans) {
    int i = 0;
    string x = a[v.first], y = b[v.second];
    while (i < min(x.length(), y.length()) && (x[i] == y[i])) {
      i++;
    }
    sum += i;
  }
  cout << sum << endl;
  for (auto v : ans) {
    cout << v.first + 1 << " " << v.second + 1 << endl;
  }
  return 0;
}
