#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 50
#define X 8
void llenar();
void circprimario();
void cambiar(char v);
void coordenadas(char imag);
void inter();
void reemplazar(char az);
void borrar(char ton);
int verificar();
char b[N][N],imagen[N],a,aux,auxi[X],let,auxi2[X],tnt,tnt1,tt,tt1;
int tamano,cuadrados,error=0,contador=0,veri,x,y,x1,y1,t=0,salir=0,rot;
int arr[N],arr1[N],arr2[N],arr3[N],xx,xx1,yy,yy1,sopa=0;
main()
{

int i=0,j=0;
char s[N];

printf("-==[ Muesta del Ultimo/s dibujado al Primero Dibujado ]==-\n");
for(i=0;i<N;i++)
	arr[i]=0;

for(i=0;i<N;i++)
	arr1[i]=0;


for(i=0;i<N;i++)
	arr2[i]=0;

for(i=0;i<N;i++)
	arr3[i]=0;

for(i=0;i<N;i++)
{
	for(j=0;j<N;j++)
		b[i][j]=' '; /*inicializo matriz*/
		
}
for(i=0;i<X;i++)
{
	auxi[i]=' ';
}

llenar();

//for(i=0;i<tamano;i++)
//{
//	for(j=0;j<tamano;j++)
//		printf("%c",b[i][j]);
//printf("\n");

//}
if(error==0)
{
	circprimario();
//	for(i=0;i<=contador;i++)
//		printf("%c\n",auxi[i]);
//	ordenar();		
			
}


}


void llenar()
{
int i,j;
scanf("%d",&tamano);
scanf("%d",&cuadrados);
if(cuadrados==0)
{
	error=1;
	printf("Error de Ingreso o Cantidad de Cuadrados es cero");
}
getchar();
gets(imagen);
for(i=0;i<tamano;i++)
	gets(b[i]);

}


void circprimario()
{
int i,k,l,j,perfect=0;
char aux1;
while(1)
{
for(l=0;l<strlen(imagen);l++)
{
coordenadas(imagen[l]);	

perfect=verificar();
if(perfect==1)  /*entra si encuentra cuadrado perfecto*/
{

	printf("  %c\n",imagen[l]);
//	printf("%d %d %d %d\n",x,y,x1,y1);	
	auxi[contador]=imagen[l];
	contador++;
	let=imagen[l];
//	printf("%c\n",let);
	tnt=' ';
	tnt1=' ';	
	sopa++;
	if(sopa==2)
	{
		borrar(let);
		break;
	}
	salir++;
	cambiar(let);
	
	
	
}



}

	sopa=0;

	inter();
//	printf("%c",auxi[i]);
	
	


if(salir>=cuadrados)
	break;

}

}

int verificar()
{
int i,j,cont0=0,cont1=0,cont2=0,cont3=0,cont1a=0,cont2a=0,cont3a=0,cont0a=0;
for(j=y;j<=y1;j++)
{
	if(b[x][j]==aux)
	{
		cont0++;
	}
cont0a++;
}
for(j=y;j<=y1;j++)
{
	if(b[x1][j]==aux)
	{
		cont1++;
	}
cont1a++;
}
for(i=x;i<=x1;i++)
{
	if(b[i][y]==aux)
	{
		cont2++;
	}
cont2a++;
}
for(i=x;i<=x1;i++)
{
	if(b[i][y1]==aux)
	{
		cont3++;
	}
cont3a++;
}
if((cont0==cont1)&&(cont2==cont3))
{
	if((cont0a==cont0)&&(cont1a==cont1)&&(cont2a==cont2)&&(cont3a==cont3))
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
else
{
	return 0;
}

}

void cambiar(char v)
{
int i,j,rese=0,k=0;

//printf("%c",v);
//printf("\n%d",y1);
yy=0;
xx=0;
yy1=0;
xx1=0;
//if(sopa==1)
//{
for(j=y;j<=y1;j++)
{

	if(b[x-1][j]!=v)
	{
	
		for(k=0;k<strlen(imagen);k++)
		{
			if(b[x-1][j]==imagen[k])
				rese=1;
		}
		if(rese==1)
		{
		rese=0;
		arr[yy]=j;
//		printf("%d ",arr[yy]);
		yy++;
		if(tnt==' ')
		{	
			tnt=b[x-1][j];
	//		printf("%c",tnt);	
		}
		else
		{	
			if(b[x-1][j]!=tnt)	
			{	
				if(tnt1==' ')
				{
					tnt1=b[x-1][j];
				}
			}
		}
		}
	}
}
//printf("\n ");
//printf("%d\n",yy);
for(j=y;j<=y1;j++)
{
	
	if(b[x+1][j]!=v)
	{
		for(k=0;k<strlen(imagen);k++)
		{
			if(b[x+1][j]==imagen[k])
				rese=1;
		}
		if(rese==1)
		{
		rese=0;
		arr[yy]=j;
//		printf("%d ",arr[yy]);
		yy++;
		if(tnt==' ')
		{	
			tnt=b[x+1][j];
		
		}
		else
		{	
			if(b[x+1][j]!=tnt)	
			{	
				if(tnt1==' ')
				{
					tnt1=b[x+1][j];
				}
			}
		}
		}
	}
}
//printf("\n%d\n",yy);
//printf(">");
for(j=y;j<=y1;j++)
{
	
	if(b[x1+1][j]!=v)
	{
		for(k=0;k<strlen(imagen);k++)
		{
			if(b[x1+1][j]==imagen[k])
				rese=1;
		}
		if(rese==1)
		{
		rese=0;
		arr1[yy1]=j;
//		printf("%d ",arr1[yy1]);
		yy1++;
		if(tnt==' ')
		{	
			tnt=b[x1+1][j];
		
		}
		else
		{	
			if(b[x1+1][j]!=tnt)	
			{	
				if(tnt1==' ')
				{
					tnt1=b[x1+1][j];
				}
			}
		}
		}
	}
}


//printf(" ");
for(j=y;j<=y1;j++)
{
	
	if((b[x1-1][j]!=v)&&(b[x1-1][j]!=' '))
	{
		
		for(k=0;k<strlen(imagen);k++)
		{
			if(b[x1-1][j]==imagen[k])
				rese=1;
		}
		if(rese==1)
		{
		rese=0;
		arr1[yy1]=j;
//		printf("%d ",arr1[yy1]);
		yy1++;
		if(tnt==' ')
		{	
			tnt=b[x1-1][j];
		
		}
		else
		{	
			if(b[x1-1][j]!=tnt)	
			{	
				if(tnt1==' ')
				{
					tnt1=b[x1-1][j];
				}
			}
		}
		}
	}
}

//printf(">");	
for(i=x;i<=x1;i++)
{
	
	if((b[i][y-1]!=v)&&(b[i][y-1]!=' '))
	{
		
		for(k=0;k<strlen(imagen);k++)
		{
			if(b[i][y-1]==imagen[k])
				rese=1;
		}
		if(rese==1)
		{
		rese=0;
		arr2[xx]=i;
//		printf("%d ",arr2[xx]);
		xx++;
		if(tnt==' ')
		{	
			tnt=b[i][y-1];
		
		}
		else
		{	
			if(b[i][y-1]!=tnt)	
			{	
				if(tnt1==' ')
				{
					tnt1=b[i][y-1];
				}
			}
		}
		}
	}
}


//printf(" ");
for(i=x;i<=x1;i++)
{
	
	if((b[i][y+1]!=v)&&(b[i][y+1]!=' '))
	{
		
		
		for(k=0;k<strlen(imagen);k++)
		{
			if(b[i][y+1]==imagen[k])
				rese=1;
		}
		if(rese==1)
		{
		rese=0;
		arr2[xx]=i;
//		printf("%d ",arr2[xx]);
		xx++;
		if(tnt==' ')
		{	
			tnt=b[i][y+1];
		
		}
		else
		{	
			if(b[i][y+1]!=tnt)	
			{	
				if(tnt1==' ')
				{
					tnt1=b[i][y+1];
				}
			}
		}
		}
	}
}

//printf(">");
for(i=x;i<=x1;i++)
{
	
	if((b[i][y1-1]!=v)&&(b[i][y1-1]!=' '))
	{
		
		for(k=0;k<strlen(imagen);k++)
		{
			if(b[i][y1-1]==imagen[k])
				rese=1;
		}
		if(rese==1)
		{
		rese=0;
		arr3[xx1]=i;
//		printf("%d ",arr3[xx1]);
		xx1++;
		if(tnt==' ')
		{	
			tnt=b[i][y1-1];
				
		}
		else
		{	
			if(b[i][y1-1]!=tnt)	
			{	
				if(tnt1==' ')
				{
					tnt1=b[i][y1-1];
				}
			}
		}
		}
	}
}


//printf(" ");
for(i=x;i<=x1;i++)
{
	
	if((b[i][y1+1]!=v)&&(b[i][y1+1]!=' '))
	{
		
		for(k=0;k<strlen(imagen);k++)
		{
			if(b[i][y1+1]==imagen[k])
				rese=1;
		}
		if(rese==1)
		{
		rese=0;
		arr3[xx1]=i;
//		printf("%d ",arr3[xx1]);
		xx1++;
		if(tnt==' ')
		{	
			tnt=b[i][y1+1];
		
		}
		else
		{	
			if(b[i][y1+1]!=tnt)	
			{	
				if(tnt1==' ')
				{
					tnt1=b[i][y1+1];
				}
			}
		}
		}
	}
}
//printf("-->%c ",tnt);
//printf("-->%c\n ",tnt1);


if((tnt1!=' ')||(tnt!=' '))
{
//	printf("8==D");
//}	
//else
//{	
//	printf("%c\n",tnt);
//	printf("%c\n",tnt1);
	tt=tnt1;
	tt1=tnt;
//	printf("|%c|\n",tt);
//	printf("|%c|\n",tt1);
}
//}

}

void inter()
{
int i,j;
//printf("\n----");
//printf("%c\n",auxi[i]);
//printf("--->%c ",tt);
//printf("--->%c\n",tt1);
if(tt!=' ')
{
//	for(i=0;i<contador;i++)
//	{
		coordenadas(auxi[0]);
		reemplazar(tt);
//	}
}
if(tt1!=' ')
{
//printf("\n@%d@\n",yy);
//	for(i=0;i<contador;i++)
//	{
		coordenadas(auxi[0]);
		reemplazar(tt1);
//	}
}
borrar(auxi[0]);
//printf("%d %d %d %d\n",x,y,x1,y1);
//for(i=0;i<tamano;i++)
//{
//	for(j=0;j<tamano;j++)
//		printf("%c",b[i][j]);
//printf("\n");
//
//}
contador=0;	
for(i=0;i<strlen(imagen);i++)
	if(imagen[i]==auxi[0])
		imagen[i]=' ';
for(i=0;i<N;i++)
	auxi[i]=' ';

}

void coordenadas(char imag)
{
int i,j,bandera=0;
//printf("%c\n",imag);	
	for(i=0;i<tamano;i++)  /*primera coordenada*/
	{
		for(j=0;j<tamano;j++)
		{
			if(b[i][j]==imag)
			{
				
				aux=imag;
				bandera=1;
				x=i;
				y=j;
				break;
			}

		
	
		
		}
	
		if(bandera==1)
		{
			bandera=0;
			break;
		}
	
	}
	for(j=tamano-1;j>=0;j--)
	{
		if(b[x][j]==imag)
		{
			y1=j;
			break;
		}
		
	}	
	for(i=tamano-1;i>=0;i--)
	{
		if(b[i][y]==imag)	
		{
			
			x1=i;
			break;
		}
		
	}
//printf("%d %d %d %d",x,y,x1,y1);
}

void reemplazar(char az)
{
int i,j,k,cass=0;
//while(1)
//{
//	printf("\n");
//	for(i=0;i<xx;i++)
//	{
//		printf("%d ",arr3[i]);
//	}
//	printf("@%d@\n",xx);
for(i=0;i<yy-1;i++)
{
	for(j=i+1;j<yy;j++)
	{
		if(arr[j]==arr[i])
			cass=1;
	}
}	
if(cass==1)
{
	for(j=0;j<yy-1;j++)
	{
		for(k=j+1;k<yy;k++)
		{	if(arr[j]==arr[k])
			{
				if(b[x+1][arr[k]]==az)
					if(b[x-1][arr[k]]==az)
						b[x][arr[k]]=az;
			}
		}
		
	}
}
	
for(i=0;i<yy1-1;i++)
{
	for(j=i+1;j<yy1;j++)
	{
		if(arr1[j]==arr1[i])
			cass=2;
	}
}	
if(cass==2)	
{
	for(j=0;j<yy1-1;j++)
	{
		for(k=j+1;k<yy1;k++)	
		{
			if(arr1[j]==arr1[k])
			{
				if(b[x1+1][arr1[k]]==az)
					if(b[x1-1][arr1[k]]==az)
						b[x1][arr1[k]]==az;
			}
		}
		
	}
}

for(i=0;i<xx-1;i++)
{
	for(j=i+1;j<xx;j++)
	{
		if(arr2[j]==arr2[i])
			cass=3;
	}
}	
if(cass==3)	
{
	for(j=0;j<xx-1;j++)
	{
		for(k=j+1;k<xx;k++)
		{
			if(arr2[j]==arr2[k])
			{
				if(b[arr2[k]][y+1]==az)
					if(b[arr2[k]][y-1]==az)
						b[arr2[k]][y]=az;
			}
		}
	}
}

for(i=0;i<xx1-1;i++)
{
	for(j=i+1;j<xx1;j++)
	{
		if(arr3[j]==arr3[i])
			cass=3;
	}
}	
if(cass==3)
{
	for(j=0;j<xx1-1;j++)
	{
		for(k=j+1;k<xx1;k++)
		{
			if(arr3[j]==arr3[k])
			{	
				if(b[arr3[k]][y1+1]==az)
					if(b[arr3[k]][y1-1]==az)
						b[arr3[k]][y1]=az;
			}
		}
	}
}

if(cass==0)
{
	
	
		if(b[x-1][arr[0]]==az)
			if(b[arr2[0]][y-1]==az)
				for(i=x;i<=arr2[0];i++)
					b[i][y]=az;
	
	

}

}



void borrar(char ton)
{
int i,j;
//salir++;
for(i=0;i<tamano;i++)
{
	for(j=0;j<tamano;j++)
		if(b[i][j]==ton)
			b[i][j]=' ';
}

}




