#include <bits/stdc++.h>
using namespace std;
int m[1005][5][11], n;
int path[1005][5][11];
vector<string> v;
int f(int p, int last, int dig) {
  if (p == n) return 1;
  int& ret = m[p][last][dig];
  if (ret != -1) return ret;
  ret = 0;
  if (!p) {
    for (int i = 0, _e(4); i < _e; i++)
      for (int j = 0, _e(10); j < _e; j++) {
        string s = v[p];
        s[i] = j + '0';
        int num;
        sscanf(s.c_str(), "%d", &num);
        if (num >= 1000 && num <= 2011) {
          int t = f(p + 1, i, j);
          if (t) return ret = 1;
        }
      }
  } else {
    int past;
    string x = v[p - 1];
    x[last] = dig + '0';
    sscanf(x.c_str(), "%d", &past);
    for (int i = 0, _e(4); i < _e; i++)
      for (int j = 0, _e(10); j < _e; j++) {
        string s = v[p];
        s[i] = j + '0';
        int num;
        sscanf(s.c_str(), "%d", &num);
        if (num >= 1000 && num <= 2011 && num >= past) {
          int t = f(p + 1, i, j);
          if (t) return ret = 1;
        }
      }
  }
  return ret;
}
void print(int p, int last, int dig) {
  if (p == n) return;
  if (!p) {
    for (int i = 0, _e(4); i < _e; i++)
      for (int j = 0, _e(10); j < _e; j++) {
        string s = v[p];
        s[i] = j + '0';
        int num;
        sscanf(s.c_str(), "%d", &num);
        if (num >= 1000 && num <= 2011) {
          int t = f(p + 1, i, j);
          if (t) {
            cout << s << endl;
            print(p + 1, i, j);
            return;
          }
        }
      }
  } else {
    int past;
    string x = v[p - 1];
    x[last] = dig + '0';
    sscanf(x.c_str(), "%d", &past);
    for (int i = 0, _e(4); i < _e; i++)
      for (int j = 0, _e(10); j < _e; j++) {
        string s = v[p];
        s[i] = j + '0';
        int num;
        sscanf(s.c_str(), "%d", &num);
        if (num >= 1000 && num <= 2011 && num >= past) {
          int t = f(p + 1, i, j);
          if (t) {
            cout << s << endl;
            print(p + 1, i, j);
            return;
          }
        }
      }
  }
}
int main() {
  cin >> n;
  v.resize(n);
  for (int i = 0, _e(n); i < _e; i++) cin >> v[i];
  memset((m), (-1), sizeof(m));
  if (!f(0, 0, 0))
    cout << "No solution" << endl;
  else
    print(0, 0, 0);
  return 0;
}
