#include <bits/stdc++.h>
using std::cin;
using std::cout;
const int N = 800800;
int n;
std::string s;
int c[N][26], tot = 1;
std::set<int> set[N];
inline void ins(std::string& s, int i) {
  int x = 1;
  for (char u : s) x = c[x][u - 'a'] ?: c[x][u - 'a'] = ++tot;
  set[x].insert(i);
}
int match[N];
long long res = 0;
inline void dfs(int x, int dep = 0) {
  for (int i = 0; i < 26; ++i)
    if (c[x][i]) {
      dfs(c[x][i], dep + 1);
      if (set[c[x][i]].size() > set[x].size()) set[x].swap(set[c[x][i]]);
      set[x].insert(set[c[x][i]].begin(), set[c[x][i]].end());
    }
  for (; set[x].size() && *set[x].begin() < 0 && *set[x].rbegin() > 0;) {
    match[*set[x].rbegin()] = -*set[x].begin();
    set[x].erase(set[x].begin());
    set[x].erase(--set[x].end());
    res += dep;
  }
}
int main() {
  std::ios::sync_with_stdio(false), cin.tie(0);
  cin >> n;
  for (int i = (1), iend = (n); i <= iend; ++i) cin >> s, ins(s, i);
  for (int i = (1), iend = (n); i <= iend; ++i) cin >> s, ins(s, -i);
  dfs(1);
  cout << res << '\n';
  for (int i = (1), iend = (n); i <= iend; ++i) {
    cout << i << ' ' << match[i] << '\n';
  }
}
