/* 1、判断是否是一个完整边框 2、判断是否长度和宽度小于3 3、判断是否有内部覆盖的现象 */ #include<stdio.h> #define N 110 #define inf 0x3fffffff struct node { int u,v; }f[N*N],ee; char s[N][N]; int n,m; void judge() { int minx,i,j,k,e,len,maxx,miny,maxy; for(e=0;e<26;e++) { len=0; for(j=1;j<=n;j++) for(k=1;k<=m;k++) if(s[j][k]=='A'+e) { ee.u=j; ee.v=k; f[len++]=ee; } if(len==0)continue; minx=inf;maxx=0;miny=inf;maxy=0; for(i=0;i<len;i++) { if(f[i].u>maxx) maxx=f[i].u; if(f[i].u<minx) minx=f[i].u; if(f[i].v>maxy) maxy=f[i].v; if(f[i].v<miny) miny=f[i].v; } if(maxx-minx<2)continue;//长度或者宽度小于三 if(maxy-miny<2)continue; if(len!=(maxx-minx+maxy-miny)*2)//是否是一个完整边框 continue; int flag=1; for(i=minx+1;i<maxx;i++) for(j=miny+1;j<maxy;j++) if(s[i][j]!='.') flag=0;//是否有内部覆盖现象 if(flag) printf("%c",'A'+e); } } int main() { int i; while(scanf("%d%d",&n,&m),n||m) { for(i=1;i<=n;i++) scanf("%s",s[i]+1); judge(); printf(" "); } return 0; }