#include<bits/stdc++.h>
using namespace std;
int n;
string s[100005];
int len[100005];
int flag;
int check(int x){
for(int i=0;i<len[x];i++){
if(s[x][i]!='?'&&s[x][i]>s[x-1][i]){
flag=i;
return 1;
}
if(s[x][i]!='?'&&s[x][i]<s[x-1][i]){
flag=i;
return -1;
}
}
return 0;
}
void cz(){
if(s[1][0]=='?') s[1][0]='1';
for(int i=1;i<len[1];i++){
if(s[1][i]=='?') s[1][i]='0';
}
for(int i=2;i<=n;i++){
if(len[i]>len[i-1]){
if(s[i][0]=='?') s[i][0]='1';
for(int j=1;j<len[i];j++){
if(s[i][j]=='?') s[i][j]='0';
}
}else{
int p=check(i);
if(!p){
int j=len[i]-1;
for(;j>=0;j--){
if(s[i][j]=='?'){
if(s[i-1][j]=='9') s[i][j]='9';
else{
s[i][j]=s[i-1][j]+1;
break;
}
}
if(!j){
puts("NO");
exit(0);
}
}
for(;j>=0;j--){
if(s[i][j]=='?') s[i][j]='0';
}
}else if(p==1){
for(int j=0;j<flag;j++){
if(s[i][j]=='?') s[i][j]=s[i-1][j];
}
for(int j=flag+1;j<len[i];j++){
if(s[i][j]=='?') s[i][j]='0';
}
}else{
int j=flag-1;
for(;j>=0;j--){
if(s[i][j]=='?') {
if(s[i-1][j]=='9') s[i-1][j]='9';
s[i][j]=s[i-1][j]+1;
break;
}
if(!j){
puts("NO");
exit(0);
}
}
int t=j-1;
for(;t>=0;t--){
if(s[i][t]=='?'){
s[i][t]=s[i-1][t];
}
}
for(;j<len[i];j++){
if(s[i][j]=='?') s[i][j]='0';
}
}
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
cin>>s[i];
len[i]=s[i].size();
if(len[i]<len[i-1]){
puts("NO");
return 0;
}
}
cz();
for(int i=1;i<=n;i++){
if(len[i]<len[i-1]||len[i]==len[i-1]&&s[i]<=s[i-1]){
puts("NO");
return 0;
}
for(int j=0;j<len[i];j++){
if(s[i][j]=='?'){
puts("NO");
return 0;
}
}
if(s[i][0]=='0'){
puts("NO");
return 0;
}
}
puts("YES");
for(int i=1;i<=n;i++){
cout<<s[i]<<"\n";
}
return 0;
}