#include<cstdio>
#include<cstring>
int n,k,cnt;
char g[10][10];
int used[10]; //用于放置棋子的列标记
void dfs(int row,int num)
{
int i;
if(num==k) //当一种方式搜完后,方式加 1;
{
cnt++;
return;
}
if(row==n) return; //当行数超过时,深搜结束。
for(i=0;i<n;i++) //第row行i列放一个棋子
{
if(!used[i]&&g[row][i]=='#')
{
used[i]=1;
dfs(row+1,num+1);
used[i]=0; //回收当前棋子
}
}
dfs(row+1,num); //row这一行不放棋子
}
int main()
{
int i,j;
while(~scanf("%d%d",&n,&k))
{
if(n==-1&&k==-1) break;
for(i=0;i<n;i++) scanf("%s",g[i]);
memset(used,0,sizeof(used));
cnt=0;
dfs(0,0);
printf("%d\n",cnt);
}
return 0;
}
07-30