1 | #include<bits/stdc++.h> |
2 | using namespace std; |
3 | const int N=30; |
4 | int n; |
5 | char mp[N][N]; |
6 | int vis[N][N]; |
7 | int flag[N]; |
8 | int ans1,ans2,ans; |
9 | int dx[4]={1,-1,0,0}; |
10 | int dy[4]={0,0,1,-1}; |
11 | void dfs(int x,int y,int a,int b,int c,int d) |
12 | { |
13 | for(int i=0;i<4;i++) |
14 | { |
15 | int xx=x+dx[i]; |
16 | int yy=y+dy[i]; |
17 | if(xx>=a&&xx<=c&&yy>=b&&yy<=d&&mp[xx][yy]==mp[x][y]&&vis[xx][yy]==0) |
18 | { |
19 | vis[xx][yy]=1; |
20 | dfs(xx,yy,a,b,c,d); |
21 | } |
22 | } |
23 | } |
24 | int main() |
25 | { |
26 | freopen("where.in","r",stdin); |
27 | freopen("where.out","w",stdout); |
28 | cin>>n; |
29 | for(int i=1;i<=n;i++) |
30 | { |
31 | for(int j=1;j<=n;j++) |
32 | { |
33 | cin>>mp[i][j]; |
34 | } |
35 | } |
36 | for(int i=1;i<=n;i++) |
37 | { |
38 | for(int j=1;j<=n;j++) |
39 | { |
40 | for(int k=i+1;k<=n;k++) |
41 | { |
42 | for(int l=j+1;l<=n;l++) |
43 | { |
44 | memset(flag,0,sizeof(flag)); |
45 | ans1=0; |
46 | ans2=0; |
47 | for(int a=i;a<=k;a++) |
48 | { |
49 | for(int b=j;b<=l;b++) |
50 | { |
51 | flag[int(mp[a][b]-'A'+1)]=1; |
52 | } |
53 | } |
54 | int num=0; |
55 | for(int a=1;a<=26;a++) |
56 | { |
57 | num+=flag[a]; |
58 | } |
59 | if(num==2) |
60 | { |
61 | char c; |
62 | for(int a=1;a<=26;a++) |
63 | { |
64 | if(flag[a]==1) |
65 | { |
66 | c=char(a-1+'A'); |
67 | break; |
68 | } |
69 | } |
70 | for(int a=i;a<=k;a++) |
71 | { |
72 | for(int b=j;b<=l;b++) |
73 | { |
74 | if(mp[a][b]==c) |
75 | { |
76 | if(vis[a][b]==0) |
77 | { |
78 | dfs(a,b,i,j,k,l); |
79 | ans1++; |
80 | } |
81 | } |
82 | else |
83 | { |
84 | if(vis[a][b]==0) |
85 | { |
86 | dfs(a,b,i,j,k,l); |
87 | ans2++; |
88 | } |
89 | } |
90 | } |
91 | } |
92 | |
93 | if((ans1==1&&ans2>=2)||(ans1>=2&&ans2==1)) |
94 | { |
95 | ans++; |
96 | |
97 | } |
98 | } |
99 | } |
100 | } |
101 | } |
102 | } |
103 | cout<<ans; |
104 | return 0; |
105 | } |