#include<stdio.h>
#include<string.h>

using namespace std;

int n,m,pom=0,iter=0;
char s[10][10];
int napadnut[10][10];

int qqq(int i,int j)
{
	int k=0;
	if (s[i-1][j]=='C') k++;
	if (s[i+1][j]=='C') k++;
	if (s[i][j-1]=='C') k++;
	if (s[i][j+1]=='C') k++;
	return k;
}

void okejiline()
{
	int i,j,k=0;
	
	for (i=0;i<n;i++)
	 for (j=0;j<m;j++)
	 {
	 	if ((s[i][j]=='.') && (napadnut[i][j]==0)) return;
	 	if ((s[i][j]>='0')&&(s[i][j]<='4'))
		 {
		   k=qqq(i,j);
	 		if (k!=s[i][j]-'0') return;
	 	}
	 }
	 pom=1;
	 for (i=0;i<n;i++)
	  {
	    for (j=0;j<m;j++)
	    printf("%c",s[i][j]);
	    
	    if (i<n-1) printf("\n");
	  }
}

void proveri(int i,int j)
{
	int q,pom1,pom2;
	if (pom==1) return;
	if (i>=n) {okejiline(); return;}
	if (pom==1) return;
	
	 	pom1=i;
		 pom2=j+1;
	 	if (pom2>=m) {pom1++; pom2=0;}
	 	proveri(pom1,pom2);
		if ((s[i][j]!='.')||(napadnut[i][j]!=0)) return;
		s[i][j]='C';
		for (q=j-1;q>=0;q--)
			if ((s[i][q]=='.')) napadnut[i][q]++; else break;
			
		for (q=j+1;q<m;q++)
			if ((s[i][q]=='.')) napadnut[i][q]++; else break;
		 
		 for (q=i-1;q>=0;q--)
			if ((s[q][j]=='.')) napadnut[q][j]++; else break;
			
		for (q=i+1;q<n;q++)
			if ((s[q][j]=='.')) napadnut[q][j]++; else break;
		
		proveri(pom1,pom2);
		s[i][j]='.';
		for (q=j-1;q>=0;q--)
			if (s[i][q]=='.') napadnut[i][q]--; else break;
			
		for (q=j+1;q<m;q++)
			if (s[i][q]=='.') napadnut[i][q]--; else break;
		 
		for (q=i-1;q>=0;q--)
			if (s[q][j]=='.') napadnut[q][j]--; else break;
			
		for (q=i+1;q<n;q++)
			if (s[q][j]=='.') napadnut[q][j]--; else break;
}

main()
{
	int i,j; 
	char t;
	scanf("%d%d",&n,&m);
	
	scanf("%c",&t);
	
	for (i=0;i<n;i++)
	 {
	 for (j=0;j<m;j++)
	 scanf("%c",&s[i][j]);
	 
	 if (i<n-1) scanf("%c",&t);
}
	 
	proveri(0,0); 
	if (pom==0) printf("-1");
}