http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1974
//時(shí)間復(fù)雜度不好

/**//*
N B N B J B
N B N B J B
dp[0][N]=1; dp[1][N]=1; dp[2][N]=2;
*/
#include<iostream>
using namespace std;
int dp[251][5];//列號(hào)//B J H Y N
int map[251][251];
int fun(char ch)


{
switch(ch)

{
case 'B':return 0;
case 'J':return 1;
case 'H':return 2;
case 'Y':return 3;
case 'N':return 4;
}
return 0;
}
int main()


{
int t;
cin>>t;
while(t--)

{
int m,n,i,j,k,t;
char ch;
long long sum=0;
cin>>m>>n;
for(i=0;i<m;i++)

{
for(j=0;j<n;j++)

{
cin>>ch;
map[i][j]=fun(ch);
}
}
for(k=0;k<n;k++)
for(t=0;t<5;t++)
dp[k][t]=0;
for(i=0;i<m-1;i++)//行

{
for(j=i+1;j<m;j++)//行

{
if(map[i][0]==map[j][0]) //第0列的 i行與j行的福娃一樣
dp[0][map[j][0]]=1;
for(k=1;k<n;k++)//列

{
for(t=0;t<5;t++)//獲取前面一列的福娃數(shù)
dp[k][t]=dp[k-1][t];
if(map[i][k]==map[j][k])

{
if(dp[k][map[i][k]]>0)//第一對(duì)出現(xiàn)的不能算數(shù),因?yàn)橹挥幸涣胁皇蔷匦?/span>
sum += dp[k][map[i][k]];
dp[k][map[i][k]]++;
}
}
for(k=0;k<n;k++)
for(t=0;t<5;t++)
dp[k][t]=0;
}
}
printf("%lld\n",sum);
}
return 0;
}

























































































