#include <bits/stdc++.h>
using namespace std;
int n;
char str[123456][10];
bool dfs(int s, int e, int r) {
  if (s >= e) return false;
  if (str[r][s] == '?') {
    str[r][s] = str[r - 1][s];
    if (dfs(s + 1, e, r))
      return true;
    else {
      if (str[r - 1][s] < '9') {
        str[r][s] = str[r - 1][s] + 1;
        for (int i = s + 1; i < e; i++)
          if (str[r][i] == '?') str[r][i] = i == 0 ? '1' : '0';
        return true;
      } else {
        str[r][s] = '?';
        return false;
      }
    }
  } else {
    if (str[r][s] > str[r - 1][s]) {
      for (int i = s; i < e; i++)
        if (str[r][i] == '?') str[r][i] = i == 0 ? '1' : '0';
      return true;
    } else if (str[r][s] < str[r - 1][s]) {
      return false;
    } else {
      if (dfs(s + 1, e, r))
        return true;
      else
        return false;
    }
  }
}
int main() {
  while (~scanf("%d", &n)) {
    int flag = 0;
    str[0][0] = '0', str[0][1] = '\0';
    for (int i = 1; i <= n; i++) scanf("%s", str[i]);
    for (int i = 1; i <= n; i++) {
      int len2 = strlen(str[i]), len1 = strlen(str[i - 1]);
      if (len1 < len2) {
        for (int j = 0; j < len2; j++)
          if (str[i][j] == '?') str[i][j] = j == 0 ? '1' : '0';
      } else if (len2 < len1)
        flag = 1;
      else {
        if (!dfs(0, len1, i)) flag = 1;
      }
      if (flag) break;
    }
    if (flag)
      printf("NO\n");
    else {
      printf("YES\n");
      for (int i = 1; i <= n; i++) printf("%s\n", str[i]);
    }
  }
  return 0;
}
