#include <bits/stdc++.h>
using namespace std;
char num[100005][10];
int main() {
  int n;
  while (cin >> n) {
    for (int i = 0; i < n; i++) {
      scanf("%s", num[i]);
    }
    int len = strlen(num[0]);
    for (int i = 0; i < len; i++)
      if (num[0][i] == '?')
        if (i == 0)
          num[0][i] = '1';
        else
          num[0][i] = '0';
    bool yes = true;
    for (int i = 1; i < n && yes; i++) {
      int lenb = strlen(num[i]);
      int lena = strlen(num[i - 1]);
      if (lena > lenb) {
        yes = false;
      } else if (lenb > lena) {
        for (int j = 0; j < lenb; j++)
          if (num[i][j] == '?')
            if (j == 0)
              num[i][j] = '1';
            else
              num[i][j] = '0';
      } else {
        int q[10], sz = 0;
        for (int j = 0; j < lenb; j++)
          if (num[i][j] == '?') {
            q[sz++] = j;
            num[i][j] = '0';
          }
        bool flag = false;
        if (sz == 0) {
          flag = atoi(num[i - 1]) < atoi(num[i]);
        } else {
          if (atoi(num[i - 1]) < atoi(num[i])) flag = true;
          for (int x = 0; x < sz && !flag; x++) {
            if (!flag) {
              num[i][q[x]] = num[i - 1][q[x]];
              if (atoi(num[i - 1]) < atoi(num[i])) flag = true;
            }
          }
          for (int x = sz - 1; x >= 0 && !flag; x--) {
            if (!flag) {
              if (num[i - 1][q[x]] != '9') {
                num[i][q[x]] = num[i - 1][q[x]] + 1;
                if (atoi(num[i - 1]) < atoi(num[i])) flag = true;
              }
            }
            if (!flag) num[i][q[x]] = '0';
          }
        }
        yes = flag;
      }
    }
    cout << ((yes) ? "YES" : "NO") << endl;
    if (yes)
      for (int i = 0; i < n; i++) {
        printf("%s\n", num[i]);
      }
  }
  return 0;
}
