#include <iostream> #include <string> using namespace std; string c[100]={""}; bool d[100][100]={false}; int dirx[4]={0,0,-1,1}; int diry[4]={-1,1,0,0}; bool dfs(char,int,int); int len; int max1; bool ano[100][100]={false}; int main() { int i=0,j,k;int count=0; string star; while(cin>>star){ c[i++]=star; len=star.length(); while(cin>>star&&star!="*****"){ c[i++]=star; } max1=i; for(j=0;j<i;j++) for(k=0;k<len;k++) { if(dfs(c[j][k],j,k)==true) count++; } i=0; cout<<count<<endl; count=0; for(j=0;j<100;j++) for(k=0;k<100;k++) { d[j][k]=false; ano[j][k]=false; } } return 0; } bool dfs(char s,int x,int y) { int i=0; bool flag=false; if(d[x][y]==true){ flag=true; return false; } if(d[x][y]==false){ d[x][y]=true; for(i=0;i<4;i++) { if(x+dirx[i]>=0&&x+dirx[i]<max1&&y+diry[i]>=0&&y+diry[i]<len) { if(c[x+dirx[i]][y+diry[i]]<s){ flag=true; ano[x][y]=true; return false; break; } else if(c[x+dirx[i]][y+diry[i]]==s){ if(dfs(c[x+dirx[i]][y+diry[i]],x+dirx[i],y+diry[i])==false) { if(ano[x+dirx[i]][y+diry[i]]==true){ d[x+dirx[i]][y+diry[i]]=true; ano[x][y]=true; flag=true; return false; break; } } d[x+dirx[i]][y+diry[i]]=true; } } } if(i==4&&flag==false){ return true; } else { ano[x][y]=true; return false; } } }