import sys input = sys.stdin.readline from collections import defaultdict,deque from time import time time0=time() H,W=map(int,input().split()) MAP0=[input().strip() for i in range(H)] ALPHA="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" flag=0 LIST=[] for i in range(H): if MAP0[i].count("#")==W: print("No") exit() if MAP0[i].count("#")>0: LIST.append(i) if flag==0: if MAP0[i].count("#")>0: flag=1 else: if MAP0[i].count("#")==0: print("No") exit() if flag==0: print("Yes") for m in MAP0: print(m) exit() def calc(MAP): N=len(MAP) M=len(MAP[0]) start=N*M goal=N*M+1 # dinic法 V=N*M+2 EDGE=[defaultdict(int) for i in range(V)] for i in range(N): for j in range(M): if (i+j)%2==0 and MAP[i][j]=="#": u,v,c=start,i*M+j,1 EDGE[u][v]=c for x,y in [(i+1,j),(i-1,j),(i,j+1),(i,j-1)]: if 0<=x1 and to!=goal and to == i*M+j-1: MAP[i][j]=ALPHA[ind] MAP[i][j-1]=ALPHA[ind] ind+=1 elif EDGE[i*M+j][to]==1 and M>1 and to!=goal and to == i*M+j+1: MAP[i][j]=ALPHA[ind] MAP[i][j+1]=ALPHA[ind] ind+=1 elif EDGE[i*M+j][to]==1 and to!=goal and to == i*M+j-M: MAP[i][j]=ALPHA[ind] MAP[i-1][j]=ALPHA[ind] ind+=1 elif EDGE[i*M+j][to]==1 and to!=goal and to == i*M+j+M: MAP[i][j]=ALPHA[ind] MAP[i+1][j]=ALPHA[ind] ind+=1 return ANS,MAP for i in range(4**(len(LIST)+1)): if time()-time0>1.9: break MAP2=[] x=i for j in range(len(LIST)+1): k=x%4 for c in range(k): MAP2.append(["#"]*W) x//=4 if jH: break if len(MAP2)>H: continue count=0 for j in range(len(MAP2)): count+=MAP2[j].count("#") if count%2==1: continue xx,yy=calc(MAP2) if xx==count//2: print("Yes") if len(yy)