#include <bits/stdc++.h>
using namespace std;
const int INF = int(1e9);
const long long INFll = 1ll * INF * INF;
const int MOD = 1000000007;
struct vertex {
  int depth;
  int g[26];
  vector<int> f;
  vector<int> s;
  vertex(int depth) : depth(depth) {
    for (int i = 0; i < 26; ++i) g[i] = -1;
  }
  vertex() : depth(0) {
    for (int i = 0; i < 26; ++i) g[i] = -1;
  }
};
vector<vertex> b;
void add(string& s, int n, bool f) {
  int v = 0;
  if (f)
    b[v].f.push_back(n);
  else
    b[v].s.push_back(n);
  for (int i = 0; i < s.size(); ++i) {
    int c = s[i] - 'a';
    if (b[v].g[c] == -1)
      b[v].g[c] = b.size(), b.push_back(vertex(b[v].depth + 1));
    v = b[v].g[c];
    if (f)
      b[v].f.push_back(n);
    else
      b[v].s.push_back(n);
  }
}
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  int n;
  cin >> n;
  b.push_back(vertex());
  for (int i = 0; i < n; ++i) {
    string s;
    cin >> s;
    add(s, i, 1);
  }
  for (int i = 0; i < n; ++i) {
    string s;
    cin >> s;
    add(s, i, 0);
  }
  vector<pair<int, int> > order;
  for (int i = 0; i < b.size(); ++i) order.push_back(make_pair(b[i].depth, i));
  sort(order.rbegin(), order.rend());
  int sum = 0;
  vector<pair<int, int> > ans;
  vector<int> used_f(n);
  vector<int> used_s(n);
  for (int i = 0; i < order.size(); ++i) {
    int num = order[i].second;
    int f, s;
    while (1) {
      while (b[num].f.size() && used_f[b[num].f.back()]) b[num].f.pop_back();
      if (b[num].f.empty()) break;
      f = b[num].f.back();
      while (b[num].s.size() && used_s[b[num].s.back()]) b[num].s.pop_back();
      if (b[num].s.empty()) break;
      s = b[num].s.back();
      b[num].f.pop_back();
      b[num].s.pop_back();
      used_f[f] = 1;
      used_s[s] = 1;
      ans.push_back(make_pair(f, s));
      sum += order[i].first;
      if (0) cerr << f + 1 << " " << s + 1 << " " << order[i].first << endl;
    }
  }
  cout << sum << endl;
  for (int i = 0; i < ans.size(); ++i)
    cout << ans[i].first + 1 << " " << ans[i].second + 1 << endl;
  if (0) cerr << "\nTIME = " << clock() << "\n";
  return 0;
}
