1 #include 2 #include 3 #include 4 #include
5 #include 6 using namespace std;
7 bool visit[30],ans[30];
8 char mp[102][102];
9 struct Node{
10 int x1,y1;
11 int x2,y2;
12 }num[30];
13 int n,m;
14 int main(){
15 while(~scanf("%d%d",&n,&m)){
16 if(n==0&&m==0)break;
17 if(n3||m3)continue;
18 memset(visit,0,sizeof(visit));
19 memset(num,0,sizeof(num));
20 memset(mp,0,sizeof(mp));
21 memset(ans,0,sizeof(ans));
22 for(int i=0;i29;i++){
23 num[i].x1=num[i].y1=1000;
24 num[i].x2=num[i].y2=0;
25 }
26 for(int i=1;i)
27 for(int j=1;j){
28 cin>>mp[i][j];
29 if(mp[i][j]!=‘.‘){
30 num[mp[i][j]-‘A‘].x1=min(num[mp[i][j]-‘A‘].x1,i);
31 num[mp[i][j]-‘A‘].y1=min(num[mp[i][j]-‘A‘].y1,j);
32 num[mp[i][j]-‘A‘].x2=max(num[mp[i][j]-‘A‘].x2,i);
33 num[mp[i][j]-‘A‘].y2=max(num[mp[i][j]-‘A‘].y2,j);
34 visit[mp[i][j]-‘A‘]=1;
35 }
36 }
37 for(int i=0;i29;i++){
38 if(visit[i]){
39 int t1=num[i].x1;
40 int t2=num[i].y1;
41 int t3=num[i].x2;
42 int t4=num[i].y2;
43 bool flag=false;
44 for(int j=t2;j){
45 if((mp[t1][j]!=(‘A‘+i))||(mp[t3][j]!=(‘A‘+i))){
46 flag=true;
47 break;
48 }
49 }
50 for(int j=t1;j){
51 if(mp[j][t2]!=(‘A‘+i)||mp[j][t4]!=(‘A‘+i)){
52 flag=true;
53 break;
54 }
55 }
56 if(t3-t12||t4-t22)flag=true;
57 if(!flag)
58 ans[i]=1;
59 }
60 }
61 for(int i=0;i29;i++){
62 if(visit[i]){
63 for(int k=num[i].x1+1;k){
64 for(int j=num[i].y1+1;j){
65 if(mp[k][j]!=‘.‘)
66 ans[i]=0;
67 }
68 }
69 }
70 }
71 for(int i=0;i29;i++)
72 if(ans[i])
73 printf("%c",i+‘A‘);
74 printf("\n");
75 }
76 }