#include <bits/stdc++.h>
using namespace std;
long long int Npow(long long int x, long long int n,
                   long long int M = 1000000007) {
  if (n == 0)
    return 1;
  else if (n % 2 == 0)
    return Npow((x * x) % M, n / 2, M);
  return (x * Npow((x * x) % M, (n - 1) / 2, M)) % M;
}
void print() { ; }
template <typename T, typename... Types>
void print(T var1, Types... var2) {
  cout << var1 << " ";
  print(var2...);
}
template <typename T>
void show(T *a, int size) {
  int i;
  cout << endl << "The array is ";
  for (i = 0; i < size; ++i) {
    cout << a[i] << " ";
  }
  cout << endl;
}
template <typename T>
void show_vector(vector<T> v) {
  cout << endl << "The vector is ";
  int i;
  for (i = 0; i < v.size(); ++i) {
    cout << v[i] << " ";
  }
  cout << endl;
}
int main() {
  long long int ans, n, i, t, j;
  string output[12], s[12];
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> t;
  while (t--) {
    unordered_map<string, long long int> m;
    cin >> n;
    ans = 0;
    for (i = 0; i < n; ++i) {
      cin >> s[i];
      m[s[i]]++;
    }
    string x;
    for (i = 0; i < n; ++i) {
      if (m[s[i]] > 1) {
        ans++;
        m[s[i]]--;
        x = s[i];
        for (j = 0; j < 10; ++j) {
          x[0] = j + '0';
          if (!m[x]) {
            output[i] = x;
            m[x] = 1;
            break;
          }
        }
        if (j == 10) {
          x = s[i];
          for (j = 0; j < 10; ++j) {
            x[1] = j + '0';
            if (!m[x]) {
              output[i] = x;
              m[x] = 1;
              break;
            }
          }
        }
      } else {
        output[i] = s[i];
      }
    }
    cout << ans << endl;
    for (i = 0; i < n; ++i) {
      cout << output[i] << endl;
    }
  }
  return 0;
}
