P3671
#include <bits/stdc++.h>
using namespace std;
char a[25][25];
int n,I[50005],J[50005],P[50005],Q[50005];
int cnt,how[3],cc[3];
bool yes[128],vis[25][25];
void dfs(int x,int y) {
vis[x][y]=true;
if(x>1&&a[x-1][y]==a[x][y]&&!vis[x-1][y]) dfs(x-1,y);
if(y>1&&a[x][y-1]==a[x][y]&&!vis[x][y-1]) dfs(x,y-1);
if(x<n&&a[x+1][y]==a[x][y]&&!vis[x+1][y]) dfs(x+1,y);
if(y<n&&a[x][y+1]==a[x][y]&&!vis[x][y+1]) dfs(x,y+1);
return ;
}
bool check(int i,int j,int p,int q) {
memset(yes,false,sizeof(yes));
int col=0;
for(int x=i;x<=p;x++)
for(int y=j;y<=q;y++)
if(!yes[a[i][j]]) {
yes[a[i][j]]=true,col++;
if(col>2) return false;
cc[col]=a[i][j];
}
if(col<2) return false;
memset(vis,false,sizeof(vis));
memset(how,0,sizeof(how));
for(int x=i;x<=p;x++)
for(int y=j;y<=q;y++)
if(!vis[x][y]) {
dfs(x,y);
if(a[x][y]==cc[1]) how[1]++;
else how[2]++;
}
if((how[1]==1&&how[2]!=1)||(how[1]!=1&&how[2]==1)) return true;
return false;
}
bool rightans(int p) {
for(int i=1;i<=cnt;i++)
if(i!=p&&I[i]<=I[p]&&J[i]<=J[p]&&P[i]>=P[p]&&Q[i]>=Q[p])
return false;
return true;
}
int main() {
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int p=i;p<=n;p++)
for(int q=j;q<=n;q++)
if(check(i,j,p,q)) {
++cnt;
I[cnt]=i,J[cnt]=j;
P[cnt]=p,Q[cnt]=q;
}
int ans=0;
for(int i=1;i<=cnt;i++)
if(rightans(i)) ans++;
cout<<ans<<endl;
return 0;
}