#include <bits/stdc++.h>
using namespace std;
char num[100010][10];
int ans[100010];
int p[10];
int get_num(char *s) {
  int ans = 0;
  for (int i = 0, sz = strlen(s); i < sz; i++) {
    ans *= 10;
    if (s[i] == '?') s[i] = '9';
    ans += s[i] - '0';
  }
  return ans;
}
int find(int pre, char *s) {
  int N = strlen(s), i, cnt = 0;
  for (i = 0; i < N; i++) {
    if (s[i] == '?') p[cnt++] = i;
  }
  if (cnt == 0) {
    int n = get_num(s);
    if (pre < n)
      return n;
    else
      return -1;
  }
  for (i = 0; i < cnt; i++) {
    for (int j = 0 + (!p[0] && !i); j < 10; j++) {
      s[p[i]] = j + '0';
      if (get_num(s) > pre) {
        break;
      }
    }
  }
  int ans = get_num(s);
  if (ans > pre) return ans;
  return -1;
}
int main() {
  int N, i;
  scanf("%d", &N);
  for (i = 0; i < N; i++) {
    scanf("%s", num[i]);
  }
  for (i = 0; i < N; i++) {
    if (!i)
      ans[i] = find(-1, num[i]);
    else
      ans[i] = find(ans[i - 1], num[i]);
    if (ans[i] == -1) {
      puts("NO");
      return 0;
    }
  }
  puts("YES");
  for (i = 0; i < N; i++) {
    printf("%d\n", ans[i]);
  }
  return 0;
}
